C ++中前缀表达的变化

时间:2020-03-13 01:39:14

标签: c++ stack expression std prefix

我想找出c ++中表达式(-(+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;
}

我没有找到此代码的答案。谁能帮助我纠正错误?

0 个答案:

没有答案