c++编写判别给定表达式中所含括号是否正确配对出现的算法
时间: 2023-04-19 11:03:37 浏览: 136
算法描述:
1. 初始化一个栈S。
2. 从左到右扫描表达式中的每一个字符。
3. 如果当前字符是左括号(即'('、'{'或'['),则将其压入栈S中。
4. 如果当前字符是右括号(即')'、'}'或']'),则取出栈顶元素,如果栈顶元素与当前字符匹配,则继续扫描下一个字符;否则,表达式中的括号不配对,算法结束。
5. 如果扫描完表达式后,栈S为空,则表达式中的括号完全配对;否则,表达式中的括号不配对,算法结束。
算法实现:
```c++
#include <iostream>
#include <stack>
#include <string>
using namespace std;
bool isMatched(const string& expr) {
stack<char> s;
for (char c : expr) {
if (c == '(' || c == '{' || c == '[') {
s.push(c);
} else if (c == ')' || c == '}' || c == ']') {
if (s.empty()) {
return false;
}
char top = s.top();
s.pop();
if ((c == ')' && top != '(') || (c == '}' && top != '{') || (c == ']' && top != '[')) {
return false;
}
}
}
return s.empty();
}
int main() {
string expr = "((a+b)*c)-(d/e)";
if (isMatched(expr)) {
cout << "括号配对正确" << endl;
} else {
cout << "括号配对不正确" << endl;
}
return ;
}
```
算法分析:
该算法的时间复杂度为O(n),其中n为表达式中字符的个数。算法使用了一个栈来存储左括号,当遇到右括号时,取出栈顶元素进行匹配。如果表达式中的括号完全配对,则最终栈为空;否则,栈中还有元素,表明表达式中的括号不配对。
阅读全文