【发布时间】: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