0

我有一个程序应该将表达式转换为反向波兰符号,然后在执行计算后显示答案。现在它不能正确执行计算。例如,如果我输入 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;

}
}
4

2 回答 2

2

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

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

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

于 2013-03-09T22:53:06.890 回答
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

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

于 2013-03-09T22:57:28.063 回答