括号匹配问题 栈c++语言
时间: 2023-11-20 10:52:43 浏览: 80
括号匹配的数据结构算法
括号匹配问题是指在一个字符串中,判断其中的左右括号是否匹配。例如,"((()))"中的括号是匹配的,而"(()))"中的括号就不匹配。这个问题可以使用栈来解决,而C++语言中也提供了栈操作的函数,比较方便。
具体来说,我们可以定义一个字符数组s,用来存储输入的符号。然后,我们可以遍历这个字符数组,如果遇到左括号,就将其压入栈中;如果遇到右括号,就将栈顶的左括号弹出,判断是否匹配。如果匹配,就继续遍历;如果不匹配,就输出错误信息。
下面是一个简单的C++代码实现:
```
#include <iostream>
#include <stack>
using namespace std;
int main() {
char s[100];
cin >> s;
stack<char> st;
int y = 1;
for (int i = 0; s[i] != '\0'; i++) {
if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
st.push(s[i]);
} else if (s[i] == ')') {
if (st.empty() || st.top() != '(') {
y = 0;
cout << "没有与第" << i << "个右括号匹配的左括号!" << endl;
break;
} else {
st.pop();
}
} else if (s[i] == ']') {
if (st.empty() || st.top() != '[') {
y = 0;
cout << "没有与第" << i << "个右括号匹配的左括号!" << endl;
break;
} else {
st.pop();
}
} else if (s[i] == '}') {
if (st.empty() || st.top() != '{') {
y = 0;
cout << "没有与第" << i << "个右括号匹配的左括号!" << endl;
break;
} else {
st.pop();
}
}
}
if (!st.empty()) {
y = 0;
cout << "没有与第" << st.size() << "个括号相匹配的右括号!" << endl;
}
if (y == 1) {
cout << "括号匹配成功!" << endl;
}
return 0;
}
```
阅读全文