Оценка выражения PostFix

Я пишу программу на 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. Что я здесь не так делаю ??
заранее спасибо

-1

Решение

К счастью, ваш код отсутствует в нескольких отделах:

Как уже указывал @ChristianAichinger, его форматирование ужасно. Это недостаток, поскольку ни вы, ни кто-либо другой не сможете его прочитать.

Ваш else if не открывает блок и, следовательно, работает только со следующим оператором, который operand2=test_stack.top(); и не вся часть, которая следует за этим. Это было бы более очевидно при правильном форматировании.

В вашем коде нет части, которая анализирует целые числа. Поэтому в вашем коде отсутствует основная часть его функциональности.

Может существовать больше ошибок, но анализ довольно сложен, пока код находится в таком состоянии.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector