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