C++ 中的有效括号
假设我们有一个表达式。表达式中有一些括号;我们必须检查这些括号是否平衡。括号的顺序为 (), {} 和 []。假设有两个字符串。“()[(){()}]”是有效的,但“{[}]”是无效的。
任务很简单;我们将使用栈来执行此操作。我们应按照以下步骤获得解决方案 −
遍历表达式,直到用尽
如果当前字符是像 (, { 或 [ 这样的左括号,则压入栈中
如果当前字符是像 ), } 或 ] 这样的右括号,则从栈中弹出,并检查弹出的括号是否是当前字符的起始括号,如果是,则没问题,否则,就是不平衡的。
字符串用尽后,如果栈中还有一些起始括号,则该字符串是不平衡的。
示例
#include <iostream> #include <stack> using namespace std; bool isBalancedExp(string exp) { stack<char> stk; char x; for (int i=0; i<exp.length(); i++) { if (exp[i]=='('||exp[i]=='['||exp[i]=='{') { stk.push(exp[i]); continue; } if (stk.empty()) return false; switch (exp[i]) { case ')': x = stk.top(); stk.pop(); if (x=='{' || x=='[') return false; break; case '}': x = stk.top(); stk.pop(); if (x=='(' || x=='[') return false; break; case ']': x = stk.top(); stk.pop(); if (x =='(' || x == '{') return false; break; } } return (stk.empty()); } int main() { string expresion = "()[(){()}]"; if (isBalancedExp(expresion)) cout << "This is Balanced Expression"; else cout << "This is Not Balanced Expression"; }
输入
"()[(){()}]"
输出
This is Balanced Expression
广告