c++用手打栈解决括号配对问题
时间: 2023-07-31 08:07:23 浏览: 116
好的,下面是一个用C++手写的栈来解决括号配对问题的示例代码:
```c++
#include <iostream>
#include <stack>
#include <string>
using namespace std;
bool isMatchingPair(char char1, char char2) {
if (char1 == '(' && char2 == ')')
return true;
else if (char1 == '{' && char2 == '}')
return true;
else if (char1 == '[' && char2 == ']')
return true;
else
return false;
}
bool areParenthesesBalanced(string exp) {
stack<char> s;
for (int i = 0; i < exp.length(); i++) {
if (exp[i] == '(' || exp[i] == '{' || exp[i] == '[')
s.push(exp[i]);
else if (exp[i] == ')' || exp[i] == '}' || exp[i] == ']') {
if (s.empty() || !isMatchingPair(s.top(), exp[i]))
return false;
else
s.pop();
}
}
return s.empty();
}
int main() {
string exp;
cout << "Enter an expression: ";
cin >> exp;
if (areParenthesesBalanced(exp))
cout << "Balanced";
else
cout << "Not balanced";
return 0;
}
```
这个程序中,我们使用了一个`stack`来存储左括号,并且每次遇到一个右括号时,我们都会检查它是否与栈顶元素匹配。如果匹配,我们就弹出栈顶元素,否则我们就返回false。在遍历完整个表达式后,如果栈为空,则返回true,否则返回false。
阅读全文