C ++程序通过使用堆栈检查均衡的身体
在这里,我们将讨论如何使用堆栈检查平衡括号。我们不仅检查打开和关闭支架,还检查支架的顺序。例如,我们可以说表达式“[[{}(){()}]]”是正确的,而表达式“{{}]”则是不正确的。
Input: Some expression with brackets "{()}[]" Output: They are balanced
算法
Step 1: Define a stack to hold brackets Step 2: Traverse the expression from left to right Step 2.1: If the character is opening bracket (, or { or [, then push it into stack Step 2.2: If the character is closing bracket ), } or ] Then pop from stack, and if the popped character is matched with the starting bracket then it is ok. otherwise they are not balanced. Step 3: After traversal if the starting bracket is present in the stack then it is not balanced.
范例程式码
#include<iostream> #include<stack> using namespace std; bool isBalanced(string expr) { stack<char> s; char ch; for (int i=0; i<expr.length(); i++) { //for each character in the expression, check conditions if (expr[i]=='('||expr[i]=='['||expr[i]=='{') { //when it is opening bracket, push into stack s.push(expr[i]); continue; } if (s.empty()) //stack cannot be empty as it is not opening bracket, there must be closing bracket return false; switch (expr[i]) { case ')': //for closing parenthesis, pop it and check for braces and square brackets ch = s.top(); s.pop(); if (ch=='{' || ch=='[') return false; break; case '}': //for closing braces, pop it and check for parenthesis and square brackets ch = s.top(); s.pop(); if (ch=='(' || ch=='[') return false; break; case ']': //for closing square bracket, pop it and check for braces and parenthesis ch = s.top(); s.pop(); if (ch =='(' || ch == '{') return false; break; } } return (s.empty()); //when stack is empty, return true } main() { string expr = "[{}(){()}]"; if (isBalanced(expr)) cout << "Balanced"; else cout << "Not Balanced"; }
输出结果
Balanced