以下代码位于我的标题文件中:
int mystrcmp(const char *s1, const char *s2) // strcmp function
{
while(*s1 == *s2)
{
if(*s1 == '\0' || *s2 == '\0')
break;
s1++;
s2++;
}
if(*s1 == '\0' && *s2 == '\0')
return (0);
else
return (-1);
}
问题是当我运行它时我的main.cpp表示它未通过2次测试
以下是我的main.cpp的摘录:
void testmystrcmp(void)
{
int iResult;
iResult = mystrcmp("Ruth", "Ruth");
ASSURE(iResult == 0);
iResult = mystrcmp("Gehrig", "Ruth");
ASSURE(iResult < 0);
iResult = mystrcmp("Ruth", "Gehrig");
ASSURE(iResult > 0); // right here mystrcmp fails the test
iResult = mystrcmp("", "Ruth");
ASSURE(iResult < 0);
iResult = mystrcmp("Ruth", "");
ASSURE(iResult > 0);
iResult = mystrcmp("", "");
ASSURE(iResult == 0); // it also fails the test here but why??
}
注意:我无法更改.cpp文件
我一直试图解决这个问题,但不知道如何。
答案 0 :(得分:5)
strcmp
被定义为如果“first”字符串大于“second”字符串则返回正值,如果它们相等则返回零值,如果“first”小于,则返回负值“第二”字符串。因此,如果字符串不相等,您应该决定哪一个更大,然后返回适当的值。
实现这一目标的一种简单方法是返回*s1 - *s2
(当它们相等时也返回0,作为奖励)。
答案 1 :(得分:2)
好吧,在您的mystrcmp
函数中,我看不到您返回正数的位置,因此"Ruth"
和"Gehrig
之间的比较将始终失败。
答案 2 :(得分:0)
您只需返回-1
或0
。阅读断言,他们为什么失败?
另外,在第5行,您只需要检查 *s1=='\0'
或 *s2=='\0'
,因为您知道它们是相同的while
条件。
答案 3 :(得分:0)
正如其他人所说,strcmp应该返回正数和负数。
请改为尝试:
int mystrcmp(const char *s1, const char *s2){
for(;*s1 && *s2 && (*s1 == *s2); s1++, s2++){}
return *s1 - *s2;
}
答案 4 :(得分:0)
嗯......你的mystrcmp函数不会在第二次测试中失败。
#include <iostream>
int mystrcmp(const char *s1, const char *s2) // strcmp function
{
while(*s1 == *s2)
{
if(*s1 == '\0' || *s2 == '\0')
break;
s1++;
s2++;
}
if(*s1 == '\0' && *s2 == '\0')
return (0);
else
return (-1);
}
int main() {
std::cout << mystrcmp("","") << std::endl;
return 0;
}
output: 0