Подтвердить что ты не робот

Strcmp() возвращает значения в C

Я знаю о strcmp() в C. Я понимаю, что когда две строки равны, strcmp возвращает 0.

Однако, когда в man-страницах указано, что strcmp возвращает меньше 0, когда первая строка меньше второй строки, ссылается ли она на длину, значения ASCII или что-то еще?

4b9b3361

Ответ 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;
}