评估多位表达式

Evaluate multi digit expression

我编写这段代码是为了计算后缀表达式,但在这段代码中我只能计算一个只有一位数字的表达式。我想编辑此代码以评估多位数。我该怎么做?

#include <iostream>
#include <stack>
#include <string>

using namespace std;

float calc(float o1,float o2,char c)
{
    if(c=='+') return o1+o2;
    if(c=='-') return o1-o2;
    if(c=='*') return o1*o2;
    if(c=='/') return o1/o2;
    else return 0;
}

float evaluate(string exp)
{
    float result=0;
    stack<char>s;
    for(int i=0;i<exp.length();i++)
    {
         if(isdigit(exp[i]))
        {

             s.push(exp[i]-'0');
        }
        else
        {
            float o2=s.top();
            s.pop();
            float o1=s.top();
            s.pop();
             result = calc(o1,o2,exp[i]);
            s.push(result);

        }
    }
    return s.top();
}

int main()
{
    string exp="382/+5-";
    cout<<evaluate(exp);
    return 0;
}

对于多位数,您需要一个分隔符号,例如。 space。 postfix 中的所有标记将被 space 分隔。您需要一次读取一个令牌。 例如,表达式“28 2 / 5 -”可以计算如下:

#include <iostream>
#include <stack>
#include <string>

using namespace std;

float calc(float o1,float o2,char c)
{
    if(c=='+') return o1+o2;
    if(c=='-') return o1-o2;
    if(c=='*') return o1*o2;
    if(c=='/') return o1/o2;
    else return 0;
}

float evaluate(string exp)
{
    float result=0;
    stack<int> s ;
    int dig = 0;
    int i=0;
    while(i<exp.length())
    {
        char e = exp[i];
        if(isdigit(exp[i])) {
            dig = dig*10 + (exp[i]-'0');
        } else if (exp[i] == ' ') {
            s.push(dig);
            dig = 0; 
        } else {
            float o2=s.top();
            s.pop();
            float o1=s.top();
            s.pop();
            result = calc(o1,o2,e);
            s.push(result);
            i++;

        }i++;
    }
    return s.top();
}

int main()
{
    string exp="28 2 / 5 -";
    cout<<evaluate(exp);
    return 0;
}

附加参考 link:Postfix evaluation for multidigit numbers