我正在学习strcmp()
C。我知道当两个字符串相等时,strcmp
返回 0。
但是,当手册页状态strcmp
在第一个字符串小于第二个字符串时返回小于 0 时,它是指长度、ASCII 值还是其他内容?
从这个意义上说,字符串的“小于”意味着字典(字母)顺序。
所以cat
小于,dog
因为cat
在字母顺序之前dog
。
在某种意义上,字典顺序是字母顺序对所有 ASCII(和 UNICODE)字符的扩展。
大于零的值表示不匹配的第一个字符在第一个字符串中的值大于在第二个字符串中的值,小于零的值表示相反。
C99 7.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;
}