用C++写一个顺序栈的表达式求值
时间: 2023-08-21 21:06:20 浏览: 54
好的,以下是一个简单的顺序栈表达式求值的 C++ 代码实现:
```c++
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int calculate(char op, int a, int b) {
if (op == '+') return a + b;
if (op == '-') return a - b;
if (op == '*') return a * b;
if (op == '/') return a / b;
return 0;
}
int evaluate(string expr) {
stack<int> s;
for (int i = 0; i < expr.size(); i++) {
char c = expr[i];
if (isdigit(c)) {
int num = 0;
while (i < expr.size() && isdigit(expr[i])) {
num = num * 10 + (expr[i] - '0');
i++;
}
i--;
s.push(num);
} else if (c == '+' || c == '-' || c == '*' || c == '/') {
int b = s.top();
s.pop();
int a = s.top();
s.pop();
s.push(calculate(c, a, b));
}
}
return s.top();
}
int main() {
string expr = "2+3*4-6/2";
cout << evaluate(expr) << endl;
return 0;
}
```
这个程序首先定义了一个 `calculate` 函数,用于计算两个数的运算结果。然后在 `evaluate` 函数中,通过遍历表达式的每个字符,判断该字符是数字还是运算符,然后对栈进行相应的操作。最后返回栈顶元素,即为表达式的求值结果。
在主函数中,我们定义了一个简单的表达式 `2+3*4-6/2`,并调用 `evaluate` 函数进行求值。输出结果为 `11`,表达式求值正确。