检查字符串是否为回文(CodeSignal 测试用例问题)

标签 c string

我正在使用 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/

相关文章:

r - 如何在R中分割字符同时保留括号内的内容?

无法将字符串输入结构数组

string - 在matlab中用运算符和宏替换字符串

c - 在 Windows 7 上获取 Valgrind

c - 默认类型 signed、unsigned、const 和 volatile

c - 数组 C 中正整数的和

string - 什么是最适合用于比较电视节目标题的字符串距离算法?

java - 向后打印字符串

c - 为什么将字符串中的字符分配给自身会导致总线错误?

c - 指针可以接受什么处理并且仍然有效?