Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C中使用数组堆栈的平衡括号#_C#_Arrays_Stack - Fatal编程技术网

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

C# C中使用数组堆栈的平衡括号#,c#,arrays,stack,C#,Arrays,Stack,我正试图用C语言制作一个程序来决定天气括号是否平衡。。 经过一些工作后,我使用数组堆栈制作了它,它正在工作,但我有两个问题: 1) 如果我以这种方式输入括号,“()[]{}(())”它会工作的 i、 e(“我必须只以([{”)开头,但是如果我以字符串开头 使用(“})]”时,即使是。。。所以我 询问是否有人能给我一个解决方案的提示 2) 有没有更好的方法用于Pop方法,因为其他条件是 只是让我恼火,如果我把它拿走,它就不再工作了 Program.cs using System; using Sy

我正试图用C语言制作一个程序来决定天气括号是否平衡。。 经过一些工作后,我使用数组堆栈制作了它,它正在工作,但我有两个问题:

1) 如果我以这种方式输入括号,
“()[]{}(())”
它会工作的 i、 e(“我必须只以
([{”)
开头,但是如果我以字符串开头 使用
(“})]”
时,即使是。。。所以我 询问是否有人能给我一个解决方案的提示

2) 有没有更好的方法用于Pop方法,因为其他条件是 只是让我恼火,如果我把它拿走,它就不再工作了

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

如果字符串以
}
开头,则正确地说它是不平衡的,除非您希望它为
}{
返回true?请针对每个问题针对每个帖子问一个问题(即使用规则<代码>堆栈分拣部分,并分别询问如何改进您的代码> MyStase代码,也可能以后更适合。注意,正如@ Rob所评论的,不清楚您认为有效的输入-而不是从控制台硬代码中读取有效的和无效的输入作为常量。(甚至可能使用单元测试的Assert.IsTrue)我正在研究堆栈的实现级别,所以我不能使用内置在IDE中的堆栈(用户级别)…很抱歉,这是我在网站上的第一篇帖子。但是现在,正如@Rob所说,如果输入的文本是“()”,它会说是平衡的,但对于“(”它会说是不平衡的,我不知道如何处理这个问题。@AhmedAllam嗯,我的观点是,
)(
通常被视为不平衡的括号。如果你想让它被视为平衡的,那么堆栈就不是正确的工具。实际上,你需要做的就是检查
的数量。)
等于
的数量)
。堆栈用于跟踪状态;括号的顺序在起作用。我认为您的代码当前报告为不平衡是正确的。