使用c++实现括号匹配
时间: 2023-10-03 17:06:52 浏览: 89
括号匹配是指对于一个只包含括号字符(包括'{','}','(',')','[',']')的字符串,判断括号是否匹配,即每个左括号是否有对应的右括号。
以下是使用栈来实现括号匹配的C++代码:
```cpp
#include <iostream>
#include <stack>
#include <string>
using namespace std;
bool isMatch(char left, char right) {
return (left == '(' && right == ')') || (left == '{' && right == '}') || (left == '[' && right == ']');
}
bool isBalanced(string s) {
stack<char> st;
for (int i = 0; i < s.length(); i++) {
if (s[i] == '(' || s[i] == '{' || s[i] == '[') {
st.push(s[i]); // 如果是左括号,入栈
} else if (s[i] == ')' || s[i] == '}' || s[i] == ']') {
if (st.empty() || !isMatch(st.top(), s[i])) { // 如果是右括号,判断栈顶元素是否匹配
return false;
}
st.pop(); // 弹出栈顶元素
}
}
return st.empty(); // 最后判断栈是否为空
}
int main() {
string s1 = "{[]()}";
string s2 = "{[(])}";
string s3 = "{[()]}{}";
cout << s1 << " is " << (isBalanced(s1) ? "balanced" : "not balanced") << endl;
cout << s2 << " is " << (isBalanced(s2) ? "balanced" : "not balanced") << endl;
cout << s3 << " is " << (isBalanced(s3) ? "balanced" : "not balanced") << endl;
return 0;
}
```
输出:
```
{[]()} is balanced
{[(])} is not balanced
{[()]}{} is balanced
```
在代码中,我们定义了一个`isMatch()`函数来判断左右括号是否匹配。然后使用一个`stack<char>`类型的栈来实现括号匹配。遍历字符串,如果是左括号,则入栈;如果是右括号,则判断栈顶元素是否与之匹配,如果匹配则弹出栈顶元素,否则返回`false`。最后,判断栈是否为空,如果为空则说明括号匹配成功,返回`true`,否则返回`false`。
阅读全文