home *** CD-ROM | disk | FTP | other *** search
/ Sams Teach Yourself C in 21 Days (6th Edition) / STYC216E.ISO / mac / Examples / Day19 / strsort.c < prev    next >
C/C++ Source or Header  |  2002-08-11  |  1KB  |  61 lines

  1. /* Using qsort() and bsearch() with strings. */
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6.  
  7. #define MAX 20
  8.  
  9. int comp(const void *s1, const void *s2);
  10.  
  11. int main( void )
  12. {
  13.     char *data[MAX], buf[80], *ptr, *key, **key1;
  14.     int count;
  15.  
  16.     /* Input a list of words. */
  17.  
  18.     printf("Enter %d words, pressing Enter after each.\n",MAX);
  19.  
  20.     for (count = 0; count < MAX; count++)
  21.     {
  22.         printf("Word %d: ", count+1);
  23.         gets(buf);
  24.         data[count] = malloc(strlen(buf)+1);
  25.         strcpy(data[count], buf);
  26.     }
  27.  
  28.     /* Sort the words (actually, sort the pointers). */
  29.  
  30.     qsort(data, MAX, sizeof(data[0]), comp);
  31.  
  32.     /* Display the sorted words. */
  33.  
  34.     for (count = 0; count < MAX; count++)
  35.         printf("\n%d: %s", count+1, data[count]);
  36.  
  37.     /* Get a search key. */
  38.  
  39.     printf("\n\nEnter a search key: ");
  40.     gets(buf);
  41.  
  42.     /* Perform the search. First, make key1 a pointer */
  43.     /* to the pointer to the search key.*/
  44.  
  45.     key = buf;
  46.     key1 = &key;
  47.     ptr = bsearch(key1, data, MAX, sizeof(data[0]), comp);
  48.  
  49.     if (ptr != NULL)
  50.         printf("%s found.\n", buf);
  51.     else
  52.         printf("%s not found.\n", buf);
  53.     return 0;
  54. }
  55.  
  56. int comp(const void *s1, const void *s2)
  57. {
  58.     return (strcmp(*(char **)s1, *(char **)s2));
  59. }
  60.  
  61.