我编写了这段代码来计算后缀表达式,但是在这段代码中,我只能计算只有一位数的表达式。我想编辑这段代码,让它来评估多位数。我该怎么做呢?
#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;
}
对于多位数,您需要一个分隔符号eg。空间。后缀中的所有标记将以空格分隔。您需要一次读取一个令牌。例如,表达式"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;
}
附加ref link:多位数的后置求值