C#回文堆栈不工作

C#回文堆栈不工作,c#,stack,palindrome,C#,Stack,Palindrome,我希望你能帮助我的计划。我试图检查用户输入是否是回文。这是我的密码 Stack cstack = new Stack(); Stack rstack = new Stack(); Console.WriteLine("Enter a palindrome string"); string input = Console.ReadLine(); foreach (char c in input) {

我希望你能帮助我的计划。我试图检查用户输入是否是回文。这是我的密码

        Stack cstack = new Stack();
        Stack rstack = new Stack();
        Console.WriteLine("Enter a palindrome string");
        string input = Console.ReadLine();

        foreach (char c in input)
        {
            cstack.Push(c);
        }

        foreach (var v in cstack)
        {
            rstack.Push(v);
        }

        if (cstack.Equals(rstack))
        {
            Console.Write("String is a palindrome");
        }
        else
        {
            Console.Write("String is not a palindrome");
        }

        Console.ReadLine();
因此,我希望我的代码所做的是从用户那里获取输入。使用foreach循环将用户输入作为字符推送到cstack中。使用另一个foreach循环将cstack中的字符(应该保存用户输入)反转到称为rstack的新堆栈中。然后使用if-else语句检查保存原始输入的c堆栈是否等于反向堆栈。此比较将确定字符串是否为回文

为大家的帮助干杯。我很高兴我没有表现得像个白痴,不知道他在干什么

抱歉,伙计们,有人知道如何使回文忽略大小写敏感度吗。我假设您使用ToLower将字符串转换为小写,但实际上我不知道我以前从未需要过不区分大小写的字符串。

Stack cstack=new Stack();
Stack<char> cstack = new Stack<char>();
            string input = "PoP";

            var inputToUpper = input.ToUpper(); /*assuming case senstivity is not to be considered */

            foreach (char c in inputToUpper)
            {
                cstack.Push(c);
            }

            bool isPalindrome = true;
            var noOfItems = cstack.Count;

            for(int i=0; i< noOfItems ; i++)
            {
                if (inputToUpper[i] != cstack.Pop())
                {
                    isPalindrome = false; break;
                }
            }

            if (isPalindrome)
            {
                Console.WriteLine("Palindrome");
            }
            else
            {
                Console.WriteLine("Non Palindrome");
            }
字符串输入=“PoP”; var inputToUpper=input.ToUpper()/*假设不考虑案例敏感性*/ foreach(inputToUpper中的字符c) { cstack.Push(c); } bool isPalindrome=true; var noOfItems=cstack.Count; for(int i=0;i

您可以参考

此回文解决方案适用于带空格的回文句子

private static bool isPalinDrome(string word)
    {
        word = word.ToLower();
        word = word.Replace(" ", "");
        char[] wordArray = word.ToCharArray();
        String reverseWord = "";

        for (int i = wordArray.Length - 1; i >= 0; i--)
        {
            reverseWord = reverseWord + wordArray[i];
        }

        if (word == reverseWord)
        {
            return true;
        }

        return false;
    }

是否必须使用堆栈来解决此问题?你可以不使用堆栈来解决这个问题。是的,我正在做的练习需要使用堆栈。添加了使用堆栈的答案如果你真的想使用两个堆栈,你可以将
(cstack.Equals(rstack))
替换为
(cstack.SequenceEquals(rstack))
谢谢你的建议。从你的暗示来看,我似乎没有我所能做到的那么高效。谢谢你的帮助。很抱歉,我的要求迫使您编辑代码。更有效的解决方案是使用for循环,然后将字符串每个部分的字符与弹出的值进行比较。如果不是回文,那么可以提前退出。