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

C#回文检测栈程序失效,请求技术排查与修复支持

问题排查与修复方案

首先,咱们来拆解你的代码里的两个核心问题,这也是导致程序无法正确判断回文的原因:

1. Stack.Equals() 比较的是对象引用,而非内容

你现在用cstack.Equals(rstack)来判断两个栈是否相等,但C#里的非泛型Stack类的Equals方法继承自Object.Equals,它默认只比较两个对象是不是同一个实例——也就是说,只要cstack和rstack是分开创建的两个栈,不管里面内容是不是一样,这个判断都会返回false,这肯定没法正确判断回文。

2. 反转栈的方式错误

第二个foreach循环遍历cstack的时候,你需要知道:栈的枚举是从顶部元素开始的。比如你输入"aba",cstack里的元素顺序(从底到顶)是a -> b -> a,遍历的时候拿到的顺序是a(顶)、b、a(底),然后你把这些元素Push到rstack里,最终rstack的元素顺序和cstack完全一样,根本没有实现反转的效果。


修复后的代码示例

这里给你两种修复思路,第一种是修正你原来的栈实现方式,第二种是更简洁的回文判断方法:

方法一:基于栈的正确实现

// 建议用泛型Stack<char>,类型更安全
Stack<char> cstack = new Stack<char>();
Stack<char> rstack = new Stack<char>();

Console.WriteLine("Enter a palindrome string");
string input = Console.ReadLine();

// 把输入字符压入原栈
foreach (char c in input)
{
    cstack.Push(c);
}

// 要反转栈,应该先把原栈的元素Pop出来,再Push到反转栈
// 注意:Pop会修改原栈,所以先复制一份原栈的内容
Stack<char> tempStack = new Stack<char>(cstack);
while (tempStack.Count > 0)
{
    rstack.Push(tempStack.Pop());
}

// 现在逐个比较两个栈的元素
bool isPalindrome = true;
while (cstack.Count > 0 && rstack.Count > 0)
{
    if (cstack.Pop() != rstack.Pop())
    {
        isPalindrome = false;
        break;
    }
}

Console.WriteLine(isPalindrome ? "String is a palindrome" : "String is not a palindrome");
Console.ReadLine();

方法二:更简洁的回文判断(无需栈)

其实判断回文不需要用到栈,直接对比字符串的首尾字符会更简单高效:

Console.WriteLine("Enter a palindrome string");
string input = Console.ReadLine();

bool isPalindrome = true;
int left = 0;
int right = input.Length - 1;

while (left < right)
{
    if (input[left] != input[right])
    {
        isPalindrome = false;
        break;
    }
    left++;
    right--;
}

Console.WriteLine(isPalindrome ? "String is a palindrome" : "String is not a palindrome");
Console.ReadLine();

额外提示

如果需要忽略大小写或者空格(比如判断"A man a plan a canal Panama"这种带空格的回文),可以先对输入做预处理:

input = input.ToLower().Replace(" ", "");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:32:34