我正在使用CodeSignal测试我的编码能力,但遇到了一个问题。
现在,我正在尝试检查字符串是否是回文。
我已经编写了应该可以工作的代码,但是1个测试用例一直失败。因此,19/20
测试用例可以正常工作,但最后一个则不能(不确定哪个是隐藏的,以防止进行硬编码)。
checkPalindrome(char * inputString) {
char temp[strlen(inputString) + 1];
int d = 0;
for (int i = strlen(inputString) - 1; i >= 0; i--, d++)
temp[d] = inputString[i];
if (strcmp(temp, inputString) == 0)
return 1;
else return 0;
}
我不确定为什么1个测试用例会一直失败,我已经在CodeBlocks中测试了大量字符串,而且它们似乎是正确的。
您在循环中遇到问题。如果inputString
为空,strlen(inputString)
则为无符号长0。如果运算符介于无符号和有符号之间,则返回无符号,这两个参数都将强制转换为无符号。因此,(unsigned long)0 - (int)1
is(unsigned long)0 - (unsigned long)1
为2 64 -1(如果unsigned long
为8字节)。
当心带符号和无符号数字之间的运算符!
我知道更糟糕的例子:
int foo = -1;
unsigned bar = 0;
if (foo >= bar)
cout << "-1 >= 0" << endl;
else
cout << "-1 < 0" << endl;
猜猜这段代码将输出什么。
PS:评论中写的也是如此。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句