RPN计算器无法正确执行计算

时间:2013-03-09 22:47:47

标签: c++ stack rpn

我有一个程序,它应该将表达式转换为反向抛光表示法,然后在执行计算后显示答案。现在它没有正确执行计算。例如,如果我输入5 + 2 + 5,它仅出于某种原因注册5 + 2。谁能告诉我我做错了什么?

#include <iostream>
#include <stack>


void calculation(int, int, char);
using namespace std;
stack<int> a;

void main(void)
{

bool expression = false;
char ch;
char done;

int op1, op2;

cout << "Reverse Polish Notation : " << endl;
cout << "Enter expression: " << endl;
while (!expression)
{
    cin >> op1;
    cin >> op2;
    cin >> ch;

    calculation(op1, op2, ch);
    if (!cin)
        expression = false;
    else
    {
        expression = true;
        calculation(op1, op2, ch);
    }
}
cout << "Your expression is " <<  a.top() << endl;

}

void calculation(int oper1, int oper2, char chr)
{
switch (chr)
{
    case '+':
        a.push(oper1 + oper2);
        break;
    case '-':
        a.push(oper1 - oper2);
        break;
    case '*':
        a.push(oper1 * oper2);
        break;
    case '/':
        a.push(oper1 / oper2);
        break;

}
}

2 个答案:

答案 0 :(得分:2)

您的程序不会转换任何内容。这是一个非常简单的RPN计算器,它采用由两个操作数和二进制运算组成的项,并计算结果。

如果您需要更复杂的RPN输入,则需要重新设计输入和计算逻辑。

如果要输入像5+4这样的中缀表达式,但是将内部表示保留为RPN堆栈,则还必须编写一个解析器来执行此操作。

答案 1 :(得分:2)

所有操作都应该来自堆栈。你的主循环看起来应该更像

while not eol
   if reading an operator
       push result of applying operator to top two stack elements
   else if reading an integer
       read it and push it on to the stack
   else 
       print an error message

print value at top of stack

我省略了一堆堆栈深度检查。