You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言使用栈实现回文判断时空格特殊字符未被过滤问题咨询

回文判断代码问题排查

你写的入栈逻辑没有问题,空格和特殊字符并不会被压入栈,你观察到的不符合预期的现象是由比对阶段的逻辑错误导致的。

具体错误点

  • 你在第二个循环中直接遍历了原始输入字符串的所有字符,其中包含你需要忽略的空格、特殊字符,但栈中仅存储了过滤后的小写字母,两个序列的内容长度、顺序都无法对应,才会出现匹配失败的问题,并非空格被入栈。
    例如输入A b a,栈中仅会压入a、b、a三个字母,但遍历原始字符串时,第二个字符是空格,会直接和栈弹出的b进行比对,自然会匹配失败,会让你误以为空格被存入了栈中。

修复方案

比对阶段也要和入栈阶段做相同的过滤逻辑,仅取原始字符串中的字母,转成小写后再和栈弹出的字符比对,非字母字符直接跳过即可。

修正后的完整palindrome函数代码如下:

int palindrome(char string[])
{
    Stack s;
    int ii;
    initStack(&s);

    // 原有入栈逻辑不变,仅压入小写字母
    for (ii = 0; string[ii] != '\0'; ii++)
    {
        if (string[ii] >= 'A' && string[ii] <= 'Z')
            string[ii] += 32;
        if (string[ii] >= 'a' && string[ii] <= 'z')
        {
            push(&s, string[ii]);
        }
    }

    // 修正后的比对逻辑,过滤非字母字符
    for (ii = 0; string[ii] != 0; ii++)
    {
        char curr = string[ii];
        // 统一转小写
        if (curr >= 'A' && curr <= 'Z')
            curr += 32;
        // 非字母字符直接跳过,不参与比对
        if (!(curr >= 'a' && curr <= 'z'))
            continue;
        // 仅字母和栈弹出值比对
        if (curr != pop(&s))
        {
            return 0;
        }
    }
    return 1;
}

内容的提问来源于stack exchange,提问作者user17213322

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:27:03