home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / tyc / list19_6.c < prev    next >
C/C++ Source or Header  |  1993-10-16  |  1KB  |  59 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.  main()
  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.", buf);
  51.      else
  52.          printf("%s not found", buf);
  53.  }
  54.  
  55.  int comp(const void *s1, const void *s2)
  56.  {
  57.      return (strcmp(*(char **)s1, *(char **)s2));
  58.  }
  59.