📌  相关文章
📜  使用堆栈检查表达式(格式良好)中的平衡括号的 C# 程序(1)

📅  最后修改于: 2023-12-03 15:36:38.956000             🧑  作者: Mango

使用堆栈检查表达式中的平衡括号的 C# 程序

在编程中,括号匹配是一个基本且常见的问题。C# 中可以通过堆栈来检查表达式中的平衡括号。一个表达式中的平衡括号指的是每个左括号都有右括号匹配,并且左右括号的数量相等。

实现思路

对于表达式中的每个字符:

  • 如果它是左括号(({[)之一,则将其推入堆栈。
  • 如果它是右括号()}])之一,则从堆栈中弹出一个元素并检查是否与该右括号匹配。

如果出现任何不匹配的情况,表达式中的括号就不是平衡的。

代码实现
public static bool IsBalanced(string expression)
{
    Stack<char> stack = new Stack<char>();
    foreach (char c in expression)
    {
        if (c == '(' || c == '[' || c == '{')
        {
            stack.Push(c);
        }
        else if (c == ')' || c == ']' || c == '}')
        {
            if (stack.Count == 0)
            {
                return false;
            }
            char top = stack.Pop();
            if ((c == ')' && top != '(') || (c == ']' && top != '[') || (c == '}' && top != '{'))
            {
                return false;
            }
        }
    }
    return stack.Count == 0;
}
使用示例
string expression1 = "(6+2)*(8-3)";
Console.WriteLine(IsBalanced(expression1)); // 输出:True

string expression2 = "((2+5)*((3-2)+(2*2)))";
Console.WriteLine(IsBalanced(expression2)); // 输出:True

string expression3 = "[{()}]";
Console.WriteLine(IsBalanced(expression3)); // 输出:True

string expression4 = "(()]";
Console.WriteLine(IsBalanced(expression4)); // 输出:False

string expression5 = "(((())()";
Console.WriteLine(IsBalanced(expression5)); // 输出:False
总结

使用堆栈检查表达式中的平衡括号是很常见的问题,实现思路也比较简单。在编写代码时,需要注意边界情况,比如表达式中没有左括号但有右括号的情况,或者堆栈中没有元素却还有右括号的情况。