在C#中使用数组堆栈的平衡括号

时间:2017-05-23 03:23:03

标签: c# arrays stack

我试图用C#制作程序来决定天气支架是否平衡.. 经过一些工作后,我使用Array Stack进行了它并且它正在工作,但我遇到了两个问题:

  

1)如果我像这样输入括号"()[]{}(())"它将起作用   即("我必须从( [ {")开始,但如果我开始了字符串   使用("})]")即使它是......所以我总是说不平衡。所以我是   询问是否有人可以给我一个解决方案的提示。

     

2)Pop方法是否有更好的方法导致else条件   只是烦我,如果我删除它,它将不再工作

Program.cs的

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Balanced_Brackets
{
    class Program
    {
        public static bool IsBalanced(string brackets)
        {
            bool balanced = false;
            MyStack s = new MyStack();
            foreach (var item in brackets)
            {
                if (item == '(' || item == '[' || item == '{')
                    s.Push(item);
                else if (item == ')' || item == ']' || item == '}')
                {
                    var poped = s.Pop();
                    if (poped == '(' && item == ')')
                         balanced = true;
                    else if (poped == '[' && item == ']')
                         balanced = true;
                    else if (poped == '{' && item == '}')
                         balanced = true;
                    else
                        return balanced = false;
                }
            }
            if (balanced == true)
                return true;
            else
                return false;
        }
        static void Main(string[] args)
        {
            string Brackets = Console.ReadLine();
            IsBalanced(Brackets);
            if (IsBalanced(Brackets))
                Console.Write("Balanced");
            else
                Console.Write("Un-Balanced");
            Console.ReadKey();
        }
    }
    class MyStack
    {
        char[] exp = new char[5];
        public int top = -1;
        public bool IsEmpty()
        {
            return (top == -1);
        }
        public bool IsFull()
        {
            return (top == exp.Length - 1);
        }
        public void Push(char a)
        {
            if (!IsFull())
                exp[++top] = a;
        }
        public char Pop()
        {
            if (!IsEmpty())
                return exp[top--];
            else
                return ' ';
        }
    }
}

0 个答案:

没有答案