Un altro motivo strcmp()
restituisce i codici lo fa è in modo che possa essere utilizzato direttamente nella funzione di libreria standard qsort()
, che consente di ordinare un array di stringhe:
#include <string.h> // for strcmp()
#include <stdlib.h> // for qsort()
#include <stdio.h>
int sort_func(const void *a, const void *b)
{
const char **s1 = (const char **)a;
const char **s2 = (const char **)b;
return strcmp(*s1, *s2);
}
int main(int argc, char **argv)
{
int i;
printf("Pre-sort:\n");
for(i = 1; i < argc; i++)
printf("Argument %i is %s\n", i, argv[i]);
qsort((void *)(argv + 1), argc - 1, sizeof(char *), sort_func);
printf("Post-sort:\n");
for(i = 1; i < argc; i++)
printf("Argument %i is %s\n", i, argv[i]);
return 0;
}
Questo piccolo programma di esempio ordina i suoi argomenti ASCIIbeticamente (ciò che alcuni chiamerebbero lessicalmente). Lookie:
$ gcc -o sort sort.c
$ ./sort hi there little fella
Pre-sort:
Argument 1 is hi
Argument 2 is there
Argument 3 is little
Argument 4 is fella
Post-sort:
Argument 1 is fella
Argument 2 is hi
Argument 3 is little
Argument 4 is there
Se strcmp()
restituito 1
(true) per archi uguali e 0
(false) per quelli inequal, sarebbe impossibile da utilizzare per ottenere il grado o direzione di disuguaglianza (cioè quanto diverso, e quale è più grande) tra le due stringhe, rendendo quindi impossibile utilizzarlo come funzione di ordinamento.
Non so quanto tu sia familiare con C. Il codice precedente utilizza alcuni dei concetti più confusionari di C: aritmetica del puntatore, rifusione puntatore e puntatori di funzione, quindi se non capisci un po 'di quel codice, non Non ti preoccupare, ci arriverai in tempo. Fino ad allora, avrai molte domande divertenti da porre su StackOverflow. ;)
fonte
2009-09-02 04:58:48
Tempo! = Denaro direttamente - è necessario utilizzare prima una conversione unità. –
complimenti a chiunque abbia rielaborato questa domanda di spam in qualcosa di potenzialmente utile per i neofiti. Non sono ancora disposto a votare per questo, per non incoraggiare il PO a postare nuovamente questa trippa. – rmeador
@remeador: Grazie, ma non insultare l'OP. – GEOCHET