波兰语表达式的计算
Calculation of Polish Expression
我正在寻找解释如何计算Polish Expression
的东西,例如:
如果我有这个((1+2)*4)+3
,在正常情况下是1+2*4+3 = 15
,但我需要这样写:12+4*3+
到使用stack
获取top的值并再次放入堆栈,请参阅我的代码:https://ideone.com/0bdkkM
我已经看到了一篇文章,但我不明白如何进行所需的操作:StackOverflow
这里有一个简单的RPN计算器,没有任何错误处理。您只需要一个堆栈来存储操作数,而不需要运算符,这使得实现起来非常容易。
请注意,此版本假定操作数是输入表达式上的个位数。我这样做是为了简化RPN表达式的解析。在现实生活中,您可能希望处理多位数的操作数。
std::stack<int> stack;
const char *expression="12+4*3+";
for(char c=*expression; c!=0; c=*expression++)
{
switch(c)
{
case '+':
{
int rhs=stack.top(); stack.pop();
int lhs=stack.top(); stack.pop();
int result=lhs+rhs;
stack.push(result);
break;
}
case '-':
{
int rhs=stack.top(); stack.pop();
int lhs=stack.top(); stack.pop();
int result=lhs-rhs;
stack.push(result);
break;
}
case '*':
{
int rhs=stack.top(); stack.pop();
int lhs=stack.top(); stack.pop();
int result=lhs*rhs;
stack.push(result);
break;
}
case '/':
{
int rhs=stack.top(); stack.pop();
int lhs=stack.top(); stack.pop();
int result=lhs/rhs;
stack.push(result);
break;
}
default:
int number=(c-'0');
stack.push(number);
break;
}
}
int final_result=stack.top();
std::cout << "result is " << final_result << std::endl;
反向波兰语之所以流行,是因为它很好地映射到了堆栈的计算机概念。
当用户输入一个数字时,将其推到堆栈上。
当用户输入运算符时,从堆栈中弹出2个数字,计算结果,然后将结果推回到堆栈上。
相关文章:
- (C++)分析树以计算返回错误值的简单算术表达式
- 断言中的Fold表达式在某些计算机上编译,但在其他计算机上不编译
- 如何计算具有指定类型的表达式的相对精度和绝对精度
- 编译器是否强制根据模板参数计算表达式?
- 为什么'typeid(x) == typeid(y)'的计算结果为 true,其中 'x' 和 'y' 分别是 T 和 T& 类型的 id-表达式?
- 如何在常量计算表达式中获取编译时错误?
- 计算表达式字符串由 std::map 中的键组成
- GDB 如何在运行时计算C++表达式
- 从C++调用 Python 或 Lua 来计算表达式,仅在需要时计算未知变量
- 错误指针:解析令牌时无法计算表达式
- 在c++lldb中使用重载运算符计算表达式
- 在不使用函数 pow 的情况下计算表达式的总和
- 使用 std::map<std::string, int> 计算表达式树
- 我怎么知道编译器是否C++编译时计算表达式
- BSTR bstrRtf = 0xcccccccccccccccc <调试时错误 Ptr>( = CXX0030:错误:无法计算表达式)
- 正在计算表达式C++
- CXX0030:错误:无法计算表达式
- 计算表达式
- 为什么c++应用程序可能不正确地计算表达式
- char*中的C++错误PTR(无法计算表达式)