Возврат, если выражение неверно или его вывод в C ++ - PullRequest
0 голосов
/ 06 мая 2018

У меня есть постфиксное выражение, и мне нужно оценить его, а также проверить его правильность. Может быть способ, которым я сначала оцениваю выражение, и если оно действительно, тогда я иду к его вычислению, но это включает в себя выполнение одной и той же работы дважды. Как это сделать за один звонок?

Мой код ниже, где функция работает для оценки, и я хочу вернуться к ошибке, где она написана

// возвращаем ошибку

Любая помощь, как поступить с этим?

#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;
}
...