用c++实现逆波兰式的生成和计算
时间: 2024-03-08 19:50:34 浏览: 118
逆波兰式也称为后缀表达式,是一种不含括号的数学表达式。其计算顺序与中缀表达式相同,但是可以通过栈来实现计算。
下面是用 C++ 实现逆波兰式的生成和计算的示例代码:
```c++
#include <iostream>
#include <stack>
#include <string>
#include <vector>
using namespace std;
int main() {
// 输入逆波兰式
string rpn;
cout << "请输入逆波兰式:" << endl;
getline(cin, rpn);
// 将逆波兰式拆分为操作数和操作符
vector<string> tokens;
string token = "";
for (int i = 0; i < rpn.length(); i++) {
if (rpn[i] == ' ') {
tokens.push_back(token);
token = "";
} else {
token += rpn[i];
}
}
tokens.push_back(token);
// 计算逆波兰式
stack<int> numStack;
for (int i = 0; i < tokens.size(); i++) {
string token = tokens[i];
if (token == "+" || token == "-" || token == "*" || token == "/") {
int num2 = numStack.top();
numStack.pop();
int num1 = numStack.top();
numStack.pop();
int result;
if (token == "+") {
result = num1 + num2;
} else if (token == "-") {
result = num1 - num2;
} else if (token == "*") {
result = num1 * num2;
} else if (token == "/") {
result = num1 / num2;
}
numStack.push(result);
} else {
int num = stoi(token);
numStack.push(num);
}
}
// 输出结果
cout << "计算结果:" << numStack.top() << endl;
return 0;
}
```
这个程序首先要求用户输入一个逆波兰式,然后将其拆分为操作数和操作符。接着,程序使用一个栈来计算逆波兰式的值。对于每个操作符,程序将栈顶的两个数弹出,计算后将结果压回栈中。对于每个操作数,程序将其转换为整数并压入栈中。最后,程序输出计算结果。
注意,这个程序没有对输入的逆波兰式进行任何错误检查,如果输入的逆波兰式不符合规范,程序可能会出错。
阅读全文