Вариация префиксного выражения в C ++ - PullRequest
0 голосов
/ 13 марта 2020

Я хочу узнать ответ выражения (- (+3 3) 2) на с ++. Ответ этого уравнения будет 4. Из-за 3 + 3 = 6 и 6-2 = 4.

Я пытаюсь реализовать этот код с постфиксным выражением, но не могу оценить скобки ( и ) Пока.

Мой код:

#include <iostream>
#include <string>
#include <bits/stdc++.h> 
using namespace std;

bool isOperand(char c)
{
// If the character is a digit then it must 
// be an operand 
    return isdigit(c);
}

double evaluatePrefix(string exprsn)
{
    stack<double> Stack;

    for (int j = exprsn.size() - 1; j >= 0; j--)
    {

        // Push operand to Stack 
        // To convert exprsn[j] to digit subtract 
        // '0' from exprsn[j]. 
        if (isOperand(exprsn[j]))
            Stack.push(exprsn[j] - '0');

        else
        {

            // Operator encountered 
            // Pop two elements from Stack 
            double o1 = Stack.top();
            Stack.pop();
            double o2 = Stack.top();
            Stack.pop();

            // Use switch case to operate on o1 
            // and o2 and perform o1 O o2. 
            switch (exprsn[j])
            {
                case '+':
                    Stack.push(o1 + o2);
                    break;
                case '-':
                    Stack.push(o1 - o2);
                    break;
                case '*':
                    Stack.push(o1 * o2);
                    break;
                case '/':
                    Stack.push(o1 / o2);
                    break;

            }
        }
    }

    return Stack.top();
}

// Driver code 
int main()
{
    string exprsn = "(- (+3 3) 2)";
    cout << evaluatePrefix(exprsn) << endl;
    return 0;
}

Я не нашел ответа на этот код. Может ли кто-нибудь помочь мне исправить ошибку?

...