波兰表达式c++
时间: 2023-08-04 19:21:59 浏览: 80
波兰表达式是一种前缀表达式,可以用来表示数学表达式,具体实现如下:
```c++
#include <iostream>
#include <stack>
#include <string>
#include <cstring>
#include <cmath>
using namespace std;
bool isOperator(char c) {
if (c == '+' || c == '-' || c == '*' || c == '/' || c == '^') {
return true;
}
else {
return false;
}
}
double calculate(double a, double b, char op) {
double res;
switch (op) {
case '+': res = a + b; break;
case '-': res = a - b; break;
case '*': res = a * b; break;
case '/': res = a / b; break;
case '^': res = pow(a, b); break;
}
return res;
}
double evaluate(string expr) {
stack<double> s;
int len = (int)expr.length();
for (int i = len - 1; i >= 0; i--) {
if (isOperator(expr[i])) {
double a = s.top();
s.pop();
double b = s.top();
s.pop();
double res = calculate(a, b, expr[i]);
s.push(res);
}
else {
double operand = 0;
int j = i, k = 0;
while (j >= 0 && isdigit(expr[j])) {
operand += (expr[j] - '0') * pow(10, k);
j--;
k++;
}
i = j + 1;
s.push(operand);
}
}
return s.top();
}
int main() {
string expr = "+ 2 3";
double res = evaluate(expr);
cout << res << endl; // 输出 5
expr = "* + 2 3 4";
res = evaluate(expr);
cout << res << endl; // 输出 20
return 0;
}
```
其中,evaluate函数用于计算波兰表达式的值,isOperator函数用于判断字符是否是运算符,calculate函数用于计算两个数字的运算结果。
阅读全文