【问题标题】:C# Palindrome Stack not workingC#回文堆栈不起作用
【发布时间】:2018-03-24 06:30:07
【问题描述】:

我希望您对我的程序提供帮助。我正在尝试检查用户输入是否是回文。这是我的代码。

        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 来解决这个问题?您可以在不使用 Stack 的情况下解决此问题..
  • 是的,我正在做的练习需要使用堆栈。
  • 使用堆栈添加答案
  • 如果真的要使用2个栈,可以把(cstack.Equals(rstack))换成(cstack.SequenceEquals(rstack))
  • 为建议喝彩。从你的暗示看来,我的代码效率不如我所能做到的。

标签: c# stack palindrome


【解决方案1】:
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");
            }

您可以参考live demo here

【讨论】:

  • 感谢您的帮助。很抱歉,我的要求迫使您编辑代码。
  • 更有效的解决方案是使用 for 循环,然后将字符串每个部分的字符与弹出的值进行比较。如果不是回文,那么你可以提前退出。
【解决方案2】:

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

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;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-17
    • 2014-04-06
    • 2018-05-07
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    相关资源
    最近更新 更多