strcmp
is the basis for sorting via qsort
.
void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *) );
#include <stdio.h> #include <string.h> #include <stdlib.h> void dump_names( const char **names ); int reverse_nocase( const void *s1, const void *s2 ); int straight_order( const void *s1, const void *s2 ); int main( void ) { const char *names[] = { "Ricardo", "Damian", "chromatic", "Larry", "Allison", NULL, }; const int names_count = (sizeof(names) / sizeof(names[0])) - 1; puts( "Initial order" ); dump_names( names ); puts( "Sorted with strcmp" ); heapsort( names, names_count, sizeof(names[0]), straight_order ); dump_names( names ); puts( "Sorted with reverse_nocase" ); heapsort( names, names_count, sizeof(names[0]), reverse_nocase ); dump_names( names ); return 0; } void dump_names( const char **names ) { const char *p; while ( (p = *names) != NULL ) { puts( p ); names++; } puts( "" ); } int straight_order( const void *s1, const void *s2 ) { const char * const * const a = s1; const char * const * const b = s2; return strcmp( *a, *b ); } int reverse_nocase( const void *s1, const void *s2 ) { const char * const * const a = s1; const char * const * const b = s2; return -strcasecmp( *a, *b ); }
Initial order Ricardo Damian chromatic Larry Allison Sorted with strcmp Allison Damian Larry Ricardo chromatic Sorted with reverse_nocase Ricardo Larry Damian chromatic AllisonTOC | Prev | Next