如果c中的字符串相同,则返回0,代码在哪里发生?

时间:2018-08-21 01:09:18

标签: c function strcmp

我发现了一个功能与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;
}

2 个答案:

答案 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是否具有相同的长度,如果长度不相等,则返回相应的比较结果。

最后,在试图排除所有不平等状况之后,它的判断是“平等的”。