后缀表达式求值c++
时间: 2024-10-04 07:02:13 浏览: 44
后缀表达式的计算_on81r_表达式求值_表达式计算_C++_计算表达式_
后缀表达式,也称为逆波兰表示法(Reverse Polish Notation,RPN),是一种计算表达式的表示方法,其中操作符位于操作数之后。在C++中计算后缀表达式的求值,通常涉及栈数据结构。下面是基本步骤:
1. **输入**:从用户或字符串读取后缀表达式的元素(数字和运算符)。
2. **遍历**:按顺序处理每个字符。如果遇到数字,直接压入栈中;如果遇到运算符,弹出栈顶的两个操作数,根据运算符的优先级进行相应的运算,并将结果压回栈。
3. **结束**:当遍历完所有元素后,栈顶剩余的就是最终的结果。
以下是简单的C++代码示例(忽略错误检查和优化):
```cpp
#include <iostream>
#include <stack>
using namespace std;
int precedence(char op) {
if (op == '+' || op == '-') return 1;
else if (op == '*' || op == '/') return 2;
else return 0; // 如果是其他未定义的运算符,默认是最高的优先级
}
int evaluate(string &tokens) {
stack<int> values;
for (char token : tokens) {
if (isdigit(token)) {
int val = 0;
while (isdigit(token)) {
val = val * 10 + token - '0';
token++; // 移动到下一个字符
}
values.push(val);
} else {
int top1 = values.top(); values.pop();
int top2 = values.top(); values.pop();
switch (token) {
case '+': values.push(top2 + top1); break;
case '-': values.push(top2 - top1); break;
case '*': values.push(top2 * top1); break;
case '/': values.push(top2 / top1); break;
}
}
}
return values.top();
}
int main() {
string input = "2 3 + 4 *";
cout << "Result is: " << evaluate(input) << endl;
return 0;
}
```
阅读全文