22

我正在学习strcmp()C。我知道当两个字符串相等时,strcmp返回 0。

但是,当手册页状态strcmp在第一个字符串小于第二个字符串时返回小于 0 时,它是指长度、ASCII 值还是其他内容?

4

5 回答 5

26

从这个意义上说,字符串的“小于”意味着字典(字母)顺序。

所以cat小于,dog因为cat在字母顺序之前dog

在某种意义上,字典顺序是字母顺序对所有 ASCII(和 UNICODE)字符的扩展。

于 2011-10-05T03:48:13.927 回答
8

大于零的值表示不匹配的第一个字符在第一个字符串中的值大于在第二个字符串中的值,小于零的值表示相反。

于 2011-10-05T03:45:39.217 回答
6

C99 7.21.4:

比较函数 memcmpstrcmpstrncmp返回的非零值的符号由被比较对象中不同的第一对字符(均解释为unsigned char)的值之间的差异符号确定。

请特别注意,结果不取决于当前的语言环境;LC_COLLATE(参见 C99 7.11)影响strcoll()strxfrm(),但不影响strcmp()

于 2011-10-05T03:58:19.963 回答
2
    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;
    }
于 2012-11-22T11:56:49.443 回答
-2

看看下面的程序,这里我根据你输入的字符串返回值。该函数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;
}
于 2013-09-21T09:43:46.977 回答