Otra razón strcmp()
devuelve los códigos que hace es para que pueda ser utilizado directamente en la función de la biblioteca estándar qsort()
, que le permite ordenar una matriz de cadenas:
#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;
}
Este pequeño programa de ejemplo ordena sus argumentos ASCIIbéticamente (lo que algunos llamarían léxicamente). 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
Si strcmp()
regresaron 1
(true) por la igualdad de cuerdas y 0
(falso) para los inequal, sería imposible su uso para obtener el grado o dirección de la desigualdad (es decir, cómo diferente, y cuál es más grande) entre las dos cadenas, por lo que es imposible usarlo como una función de clasificación.
No sé qué tan familiarizado estás con C. El código anterior usa algunos de los conceptos más confusos de C: aritmética de punteros, refinanciación de punteros y punteros a funciones, así que si no entiendes algo de ese código, no uses No te preocupes, llegarás a tiempo. Hasta entonces, tendrás muchas preguntas divertidas para hacer en StackOverflow. ;)
Time! = Dinero directamente - primero debe emplear una conversión de unidades. –
felicidades a quien haya reelaborado esta pregunta sobre correo no deseado en algo potencialmente útil para los novatos. Sin embargo, todavía no estoy dispuesto a votar, por miedo a que el OP publique nuevamente tales tripas. – rmeador
@remeador: Gracias, pero no insultes al OP. – GEOCHET