我正在使用 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)
为 unsigned long 0。如果 unsigned 和 signed 之间的运算符返回 unsigned,则两个参数都转换为 unsigned。所以,(unsigned long)0 - (int)1
是 (unsigned long)0 - (unsigned long)1
,即 264 -1(如果 unsigned long
是 8 字节)。
注意有符号数和无符号数之间的运算符!
我知道更糟糕的例子:
int foo = -1;
unsigned bar = 0;
if (foo >= bar)
cout << "-1 >= 0" << endl;
else
cout << "-1 < 0" << endl;
猜猜这段代码打印了什么。
PS:评论里写的也是真的。
关于检查字符串是否为回文(CodeSignal 测试用例问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55441788/