【发布时间】:2011-12-01 04:07:10
【问题描述】:
我正在学习 C 语言中的 strcmp()。我知道当两个字符串相等时,strcmp 返回 0。
但是,当手册页指出strcmp 在第一个字符串小于第二个字符串时返回小于 0 时,它指的是长度、ASCII 值还是其他什么?
【问题讨论】:
我正在学习 C 语言中的 strcmp()。我知道当两个字符串相等时,strcmp 返回 0。
但是,当手册页指出strcmp 在第一个字符串小于第二个字符串时返回小于 0 时,它指的是长度、ASCII 值还是其他什么?
【问题讨论】:
大于零的值表示第一个不匹配的字符在第一个字符串中的值大于在第二个字符串中的值,小于零的值表示相反。
【讨论】:
在这个意义上,字符串的“小于”表示字典(字母)顺序。
所以cat 小于dog,因为cat 按字母顺序排列在dog 之前。
在某种意义上,字典顺序是字母顺序对所有 ASCII(和 UNICODE)字符的扩展。
【讨论】:
strcmp() 的宽字符版本。但是,是的,我明白你的意思。
C997.21.4:
比较函数返回的非零值的符号 memcmp、strcmp 和 strncmp 由 第一对字符的值之间的差异(两者 解释为 unsigned char) 的对象不同 比较。
请特别注意,结果不依赖于当前的语言环境; LC_COLLATE(参见 C99 7.11)影响 strcoll() 和 strxfrm(),但不影响 strcmp()。
【讨论】:
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;
}
【讨论】:
看下面的程序,这里我根据你输入的字符串返回值。函数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;
}
【讨论】: