波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的波兰表示法为+ 2 3。波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的波兰表示法为* + 2 3 4。本题求解波兰表达式的值,其中运算符包括+ - * /四个。 用C++实现
时间: 2023-10-14 14:16:06 浏览: 222
波兰表达式计算
5星 · 资源好评率100%
好的,以下是C++实现波兰表达式求值的代码:
```cpp
#include <iostream>
#include <stack>
#include <string>
#include <cstdlib>
using namespace std;
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 expression) {
stack<int> operands;
for (int i = expression.size() - 1; i >= 0; i--) {
char c = expression[i];
if (isdigit(c)) {
operands.push(c - '0');
} else if (c == '+' || c == '-' || c == '*' || c == '/') {
int a = operands.top(); operands.pop();
int b = operands.top(); operands.pop();
operands.push(calculate(a, b, c));
}
}
return operands.top();
}
int main() {
string expression = "+ 2 3";
cout << evaluate(expression) << endl; // 输出 5
expression = "* + 2 3 4";
cout << evaluate(expression) << endl; // 输出 20
return 0;
}
```
其中,evaluate函数接收一个字符串类型的波兰表达式,并返回其计算结果。在函数内部,我们使用栈来存储操作数,并从右向左遍历表达式,遇到数字则将其入栈,遇到运算符则从栈中弹出两个操作数进行计算,并将结果入栈。最后,栈中剩下的唯一元素即为表达式的计算结果。
阅读全文