Strcmp() возвращает значения в C
Я знаю о strcmp()
в C. Я понимаю, что когда две строки равны, strcmp
возвращает 0.
Однако, когда в man-страницах указано, что strcmp
возвращает меньше 0, когда первая строка меньше второй строки, ссылается ли она на длину, значения ASCII или что-то еще?
Ответы
Ответ 1
В этом смысле "меньше" для строк означает лексикографический (алфавитный) порядок.
Итак, cat
меньше dog
, потому что cat
в алфавитном порядке до dog
.
Лексикографический порядок - это, в некотором смысле, расширение алфавитного порядка для всех символов ASCII (и UNICODE).
Ответ 2
Значение больше нуля указывает на то, что первый символ, который не соответствует, имеет большее значение в первой строке, чем во второй, а значение, меньшее нуля, указывает на противоположное.
Ответ 3
C99 7.21.4:
Знак ненулевого значения, возвращаемого функциями сравнения memcmp, strcmp, а strncmp определяется знаком разница между значениями первой пары символов (оба интерпретируется как без знака char), которые отличаются в по сравнению.
Обратите внимание, в частности, что результат не зависит от текущей локали; LC_COLLATE
(см. C99 7.11) влияет на strcoll()
и strxfrm()
, но не strcmp()
.
Ответ 4
int strcmp (const char * s1, const char * s2)
{
for(; *s1 == *s2; ++s1, ++s2)
if(*s1 == 0)
return 0;
return *(unsigned char *)s1 < *(unsigned char *)s2 ? -1 : 1;
}
Ответ 5
Посмотрите следующую программу, здесь я возвращаю значение в зависимости от введенной строки. Функция strcmp
возвращает значение в соответствии со значением ASCII всей строки, считанной полностью.
Например, str1 = "aab"
и str2 = "aaa"
вернут 1 как aab > aaa.
int main()
{
char str1[15], str2[15];
int n;
printf("Enter the str1 string: ");
gets(str1);
printf("Enter the str2 string : ");
gets(str2);
n = strcmp(str1, str2);
printf("Value returned = %d\n", n);
return 0;
}