Еще одна причина, по которой strcmp()
возвращает коды, которые он делает, заключается в том, что его можно использовать непосредственно в стандартной библиотечной функции qsort()
, позволяющей отсортировать массив строк:
#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;
}
Эта небольшая программа-пример сортирует свои аргументы ASCIIbetically (что некоторые называют лексически). 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
Если бы strcmp()
вернул 1
(true) для одинаковых строк и 0
(false) для неравных, было бы невозможно использовать его для получения направления Степень или неравенства (т. Е. Насколько оно отличается от того, которое больше) между двумя строками, что делает невозможным его использование в качестве функции сортировки.
Я не знаю, насколько вы знакомы с C. В приведенном выше коде используются некоторые из наиболее запутанных понятий C - арифметика указателей, преобразование указателей и указатели функций - поэтому, если вы не понимаете часть этого кода, не волнуйся, ты доберешься вовремя. А до тех пор у вас будет множество интересных вопросов на StackOverflow. ;)