У меня есть постфиксное выражение, и мне нужно оценить его, а также проверить его правильность. Может быть способ, которым я сначала оцениваю выражение, и если оно действительно, тогда я иду к его вычислению, но это включает в себя выполнение одной и той же работы дважды. Как это сделать за один звонок?
Мой код ниже, где функция работает для оценки, и я хочу вернуться к ошибке, где она написана
// возвращаем ошибку
Любая помощь, как поступить с этим?
#include<iostream>
#include<stack>
#include<cstring>
using namespace std;
int isOperand(char s){
if(s >= '0' && s<= '9')
return 1;
return 0;
}
int applyOperation(int val1, int val2, char expression){
switch(expression){
case '+':
return val2+val1;
case '-':
return val2-val1;
case '*':
return val2*val1;
case '/':
return val2/val1;
}
}
int evaluatePostfix(char* exp){
stack<int> operandStack;
int l = strlen(exp);
for(int i=0;i<l;i++){
if(isOperand(exp[i]))
operandStack.push(exp[i]-'0');
else{
if(operandStack.empty())
//return error
int val1 = operandStack.top();
operandStack.pop();
if(operandStack.empty())
//return error
int val2 = operandStack.top();
operandStack.pop();
int result = applyOperation(val1,val2,exp[i]);
operandStack.push(result);
}
}
int topElem = operandStack.top();
operandStack.pop();
if(!operandStack.empty())
//return error
return operandStack.top();
}
int main()
{
char exp[] = "231*+9-";
printf ("Value of %s is %d", exp, evaluatePostfix(exp));
return 0;
}