如何在后缀表达式中接受负值

时间:2019-04-19 16:39:31

标签: c++ postfix-notation negative-number

有人问过类似的问题here,但是仍然没有答案(尽管建议很好,但至少没有提供代码)

与超链接的代码不同,我的代码仅评估输入的表达式 我无法构造一个接受负数的逻辑。 请注意,在我的代码中,要输入的表达式必须采用正确的后缀格式,并且多位数字必须用括号括起来。

这是我的代码:

float expression::eval()
{
    std::stack<float> s;
    float op1, op2;
    for (int i = 0; i < expr.length(); i++)
    {
        if (expr[i] == '(')
        {
            float sum = 0;
            while (expr[++i] != ')')
            {
                sum = sum * 10.0 + (float(expr[i]) - float('0'));
            }
            s.push(sum);
            continue;
        }
        else if (!isOperator(expr[i]))
        {
            s.push(float(expr[i]) - float('0'));
        }
        else
        {
            op2 = s.top();
            s.pop();
            op1 = s.top();
            s.pop();
            switch (expr[i])
            {
            case '+':
                s.push(op1 + op2);
                break;
            case '-':
                s.push(op1 - op2);
                break;
            case'*':
                s.push(op1*op2);
                break;
            case '/':
                s.push(op1 / op2);
                break;

            default:
                std::cerr << "Wrong operator" << std::endl;
                return 0;
            }
        }
    }
    return s.top();
}

请注意,表达式是我代码中的一个对象。 我的班级:

class expression
{
    //constructors and destructors
public:
    expression();
    ~expression();
    //member properties
private:
    std::string expr;
    //member methods
public:
    // accepts the expression from the user
    void input();
    //prints the accepted expression
    void output();
    //evaluates the accepted expression
    float eval();
    //
    friend bool isOperator(char);
};

例如:-12+12*2 需要写为

(12)(12)+2*

这是我尝试过的。但是,它不起作用。任何人都可以解释这种逻辑的问题吗?:

    if (expr[i] == '(')
        {
            float sum = 0;
            bool flag = false;
            while (expr[++i] != ')')
            {
                if (expr[i] == '-')
                    flag = true;
                sum = sum * 10.0 + (float(expr[i]) - float('0'));
            }
            if (flag)
                sum = -sum;
            s.push(sum);
            continue;
        }

0 个答案:

没有答案