1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
#include <stdio.h>
#define NSTRS 10 /* number of strings */
#define STRLEN 16 /* length of each string */
char strs[NSTRS][STRLEN]; /* array of strings */
main()
{
int i;
extern int compare1(), compare2();
/*
* Prompt the user for NSTRS strings.
*/
for (i = 0; i < NSTRS; i++) {
printf("Enter string #%d: ", i);
gets(strs[i]);
}
/*
* Sort the strings into ascending order. There
* are NSTRS array elements, each one is STRLEN
* characters long. Note we give the size of
* the array element, not the length of the
* string in it.
*/
qsort(strs, NSTRS, STRLEN, compare1);
/*
* Print the strings.
*/
printf("\nSorted in ascending order:\n");
for (i = 0; i < NSTRS; i++)
printf("\t%s\n", strs[i]);
/*
* Now sort the strings in descending order.
*/
qsort(strs, NSTRS, STRLEN, compare2);
printf("\nSorted in descending order:\n");
for (i = 0; i < NSTRS; i++)
printf("\t%s\n", strs[i]);
exit(0);
}
/*
* compare1--compare a and b, and return less than,
* greater than, or equal to zero. Since
* we are comparing character strings, we
* can just use strcmp to do the work for us.
*/
compare1(a, b)
char *a, *b;
{
return(strcmp(a, b));
}
/*
* compare2--this compares a and b, but is used for
* sorting in the opposite order. Thus it
* returns the opposite of strcmp. We can
* simulate this by simply reversing the
* arguments when we call strcmp.
*/
compare2(a, b)
char *a, *b;
{
return(strcmp(b, a));
}
|