用c+用c++写算术表达式中包含圆括号、方括号和花括号三种类型的括号,编写一个算法判断其中的括号是否匹配。
时间: 2024-02-17 09:01:39 浏览: 77
好的,这是一个很常见的括号匹配问题。我可以给你提供一个使用栈(stack)的算法来解决这个问题:
1. 遍历算术表达式中的每个字符
2. 如果当前字符是左括号(即圆括号、方括号和花括号中的一个),将其压入栈中
3. 如果当前字符是右括号,弹出栈顶元素
4. 如果栈顶元素与当前右括号不匹配,或者栈为空,则说明括号不匹配,返回 false
5. 如果遍历完整个表达式后,栈不为空,则说明括号不匹配,返回 false
6. 否则,返回 true,表示括号匹配
以下是C++代码实现:
```c++
#include <iostream>
#include <stack>
#include <string>
using namespace std;
bool isMatching(string s) {
stack<char> st;
for (char c : s) {
if (c == '(' || c == '[' || c == '{') {
st.push(c);
} else if (c == ')' || c == ']' || c == '}') {
if (st.empty()) {
return false;
}
char top = st.top();
st.pop();
if ((c == ')' && top != '(') || (c == ']' && top != '[') || (c == '}' && top != '{')) {
return false;
}
}
}
return st.empty();
}
int main() {
string s = "((2+3)*[5-2])/3";
if (isMatching(s)) {
cout << "括号匹配" << endl;
} else {
cout << "括号不匹配" << endl;
}
return 0;
}
```
这个算法的时间复杂度是 O(n),其中 n 是算术表达式的长度。
阅读全文