我正在编写一个C ++程序来评估PostFIx表达式。这是以下代码:
#include <iostream>
#include <string>
#include <stack>
#include <conio.h>
using namespace std;
int operand1;
int operand2;
bool operator_test(char character){ //to test whether its an operator or not
if(character=='+' || character=='-' || character=='*' || character=='/')
return true;
else
return false;
}
bool operand_test(char character){ //to test whether its an operand or not
if(!operator_test(character) && character!='(' && character!=')')
return true;
else
return false;
}
int DoOperation(char operation,int operand1,int operand2){
if(operation=='+') return operand1+operand2;
else if(operation=='-') return operand1-operand2;
else if(operation=='*') return operand1*operand2;
else if(operation=='/') return operand1/operand2;
}
int main(){
string expression;
cout<<"ENTER POSTFIX EXPRESSION"<<endl;
cin>>expression;
stack<int>test_stack;
int result;
for(int i=0;i<expression.length();i++){
if(operand_test(expression[i]))
test_stack.push(expression[i]);
else if(operator_test(expression[i]))
operand2=test_stack.top();
test_stack.pop();
operand1=test_stack.top();
test_stack.pop();
result=DoOperation(expression[i],operand1,operand2);
test_stack.push(result);
}
cout<<"EVALUATION: "<<test_stack.top()<<endl;
getch();
return 0;
}
如果我输入23+,则应输出5作为输出。但它给了51.我在这里做错了什么? 提前谢谢
答案 0 :(得分:0)
在我的头脑中,你的代码在几个部门都缺乏:
正如@ChristianAichinger已经指出的那样,它的格式很糟糕。这是一个缺陷,因为你和其他任何人都无法阅读它。
你的else if
没有打开一个块,因此只对下一个语句operand2=test_stack.top();
进行操作,而不是跟随它的整个部分。正确的格式化会更明显。
您的代码中没有任何部分可以解析整数。因此,您的代码缺少其功能的主要部分。
可能存在更多错误,但只要代码处于这种状态,分析就相当困难。