оценить постфикс - PullRequest
       1

оценить постфикс

0 голосов
/ 11 апреля 2011

В моем коде предполагается вычислить значения выражения postfix.Но я застрял в «результате», который я не знаю, как написать код.Я написал: result = operand1 operation.push operand2 и по логике выдаст ошибку.Я использовал 2 стека.

int main() 
{
    string input;
    cout << "Enter a postfix expression: " << endl;
    getline(cin, input);

    double operand1, operand2, result;
    stack<double> number;
    stack<char>operation;

    int i=0;
    while (i < input.length()) 
    {
        if (input[i] == '+' || input[i] == '-' || input[i] == '*' || input[i] == '/' || input[i] == '^') 
            operation.push(input[i]);
        else 
            number.push(input[i]);
        i++;
    }

    operand2 = number.top( );
    number.pop( );
    operand1 = number.top( );
    number.pop( );
    result = operand1 operation.push(input[i]) operand2
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    return 0;
}

Может кто-нибудь предложить лучшее решение?Спасибо

Ответы [ 2 ]

1 голос
/ 11 апреля 2011

Вам нужно сделать switch для оператора и вычислить результат самостоятельно:

char op = operation.top();
switch( op ) {
    case '+': result = operand1 + operand2; break;
    case '-': result = operand1 - operand2; break;
    case '*': result = operand1 * operand2; break;
    case '/': result = operand1 / operand2; break;
    case '^': result = pow(operand1, operand2) ; break;
}
0 голосов
/ 11 апреля 2011

Прежде всего вам нужен только один стек

тогда выражение

результат = операнд1 операция.пуш операнд2

не похоже на какой-либо постфикс, который я знаю, вместо этого я ожидал что-то вроде

operand1 operand2 operator

поэтому вы помещаете операнды в стек, а всякий раз, когда вы находите оператор, вы помещаете два верхних элемента в стек и помещаете результат.

1012 *, например *

infix 10 * ( 12 + 15 ) -> postfix 12 15 + 10 *

затем при оценке (псевдокод)

push -> 12 [operand]
push -> 15 [operand]
pop -> +   [operator]
push result 12+15 [operand]
push 10 [operand]
pop -> *  [operator]
push result 27*10 [operand]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...