【问题标题】:Implement strcmp function in C [duplicate]在C中实现strcmp函数[重复]
【发布时间】:2017-11-05 18:14:38
【问题描述】:

我想实现strcmp,所以这是我尝试过的:

int compare(char *str1, char *str2, int maximumCharactersToCompare)
{
    int i;
    int result = 0;
    for (i = 0; i < maximumCharactersToCompare; i++)
    {
        if (str1[i] > str2[i])
            result = 1;
        else if (str1[i] < str2[i])
            result = -1;
        if (str1[i] == '\0' || str1[i] == '\0')
            break;
    }

    return result;
}

我的用法:

char str1[127];
char str2[127];

printf("Please enter first string: ");
scanf("%s", str1);

printf("Please enter second string: ");
scanf("%s", str2);

int result = compare(str1, str2, 127);

所以我的问题是,如果我尝试比较 "test""test " 这个返回 0 我可以看到 str2 等于 "test" 而不是 "test " 这就是为什么我的结果是0

【问题讨论】:

  • 首先测试长度。如果它们不匹配,则返回“不等于”。一旦长度相等,就可以安全地进行比较。
  • 但是为什么我的 str1 和 str2 都得到了值“test”,尽管我输入了 str2="test"
  • 这是因为scanf 停在第一个空格处。
  • @Jean-FrançoisFabre 没有理由测试任何长度。较短字符串的终止 \0 将与较长字符串中的字符不相等
  • @AnttiHaapala 这是真的。为什么要重新编码 strcmp? (好吧,我在汇编中对其进行了重新编码,但我无权访问任何 C 库)

标签: c


【解决方案1】:

你输入

if (str1[i] == '\0' || str1[i] == '\0')

试试

if (str1[i] == '\0' || str2[i] == '\0')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2011-12-01
    • 1970-01-01
    相关资源
    最近更新 更多