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