我发现了一个功能与strcmp
相同的函数,但是我看不到比较s1 == s2
在哪里发生。我需要帮助。谢谢。
int MyStrcmp (const char *s1, const char *s2)
{
int i;
for (i = 0; s1[i] != 0 && s2[i] != 0; i++)
{
if (s1[i] > s2[i])
return +1;
if (s1[i] < s2[i])
return -1;
}
if (s1[i] != 0)
return +1;
if (s2[i] != 0)
return -1;
return 0;
}
答案 0 :(得分:5)
如果s1 == s2
,则还意味着两个字符串的长度相等。记住这一点,通过for循环,循环中的if语句都不是正确的。因此,我们将s1[i] = s2[i] = 0
设置为给定字符串的长度,从而使for循环转为i
。现在,对于其余两个if语句,没有一个条件像s1[i] = s2[i] = 0
一样成立。这样,代码将返回0
。
答案 1 :(得分:3)
我们确实看不到'==',因为该函数使用排除方法,所以该函数尝试过滤所有不平等情况。
该函数的前半部分:比较s1和s2之间的每个char,如果char中的任何一个不相等,则函数结束并返回相应的比较结果。
该函数的后半部分:比较s1和s2是否具有相同的长度,如果长度不相等,则返回相应的比较结果。
最后,在试图排除所有不平等状况之后,它的判断是“平等的”。