我正在搜索解释我如何计算Polish Expression
的内容,例如:
如果我有这个((1+2)*4)+3
,正常方式是1+2*4+3 = 15
,但我需要
这样写:12+4*3+
使用stack
获取top的值并再次放入堆栈,请参阅我的代码:https://ideone.com/0bdkkM
我已经看过一篇文章,但我不明白我如何才能完成所需的操作:StackOverflow
答案 0 :(得分:1)
反向波兰变得流行的原因是因为它很好地映射到堆栈的计算机概念。
当用户输入数字时,将其推入堆栈。
当用户进入操作员时,从堆栈中弹出2个数字,计算结果,然后将结果推回堆栈。
答案 1 :(得分:1)
这是一个简单的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;