C# C中使用数组堆栈的平衡括号#
我正试图用C语言制作一个程序来决定天气括号是否平衡。。 经过一些工作后,我使用数组堆栈制作了它,它正在工作,但我有两个问题: 1) 如果我以这种方式输入括号,C# C中使用数组堆栈的平衡括号#,c#,arrays,stack,C#,Arrays,Stack,我正试图用C语言制作一个程序来决定天气括号是否平衡。。 经过一些工作后,我使用数组堆栈制作了它,它正在工作,但我有两个问题: 1) 如果我以这种方式输入括号,“()[]{}(())”它会工作的 i、 e(“我必须只以([{”)开头,但是如果我以字符串开头 使用(“})]”时,即使是。。。所以我 询问是否有人能给我一个解决方案的提示 2) 有没有更好的方法用于Pop方法,因为其他条件是 只是让我恼火,如果我把它拿走,它就不再工作了 Program.cs using System; using Sy
“()[]{}(())”
它会工作的
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嗯,我的观点是,)(
通常被视为不平衡的括号。如果你想让它被视为平衡的,那么堆栈就不是正确的工具。实际上,你需要做的就是检查的数量。)
等于的数量)
。堆栈用于跟踪状态;括号的顺序在起作用。我认为您的代码当前报告为不平衡是正确的。