表达式求值用栈c++代码
时间: 2023-09-14 13:11:44 浏览: 146
表达式求值【栈】C++
下面是一个简单的用栈实现表达式求值的 C++ 代码:
```cpp
#include <iostream>
#include <stack>
#include <string>
using namespace std;
// 判断一个字符是否为操作符
bool isOperator(char c) {
return c == '+' || c == '-' || c == '*' || c == '/';
}
// 计算两个数的结果
int calculate(int a, int b, char op) {
switch (op) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
default:
return 0;
}
}
// 计算表达式的值
int evaluate(string exp) {
stack<int> s;
for (int i = 0; i < exp.size(); i++) {
char c = exp[i];
if (isdigit(c)) { // 如果是数字,将其转换为整数并压入栈中
s.push(c - '0');
} else if (isOperator(c)) { // 如果是操作符,从栈中弹出两个数进行计算,并将结果压入栈中
int b = s.top();
s.pop();
int a = s.top();
s.pop();
s.push(calculate(a, b, c));
}
}
return s.top(); // 最后栈中只剩下一个数,即为表达式的值
}
int main() {
string exp = "53+82-*"; // 后缀表达式 5 + 3 * (8 - 2)
int result = evaluate(exp);
cout << "表达式的值为:" << result << endl; // 输出 29
return 0;
}
```
上述代码中,使用了一个 `stack` 来保存操作数,如果遇到数字则将其转成整数并压入栈中,如果遇到操作符,则从栈中弹出两个操作数进行计算,并将计算结果压入栈中。最后,栈中只剩下一个数,即为表达式的值。这里使用的是后缀表达式,也可以根据需要改成中缀或前缀表达式的求值方法。
阅读全文