用栈实现后缀表达式求值
int calsub(float opand1,char op,float opand2,float &result)
{
if(op=='+')
{
result=opand1+opand2;
}
if(op=='-')
{
result=opand1-opand2;
}
if(op=='*')
{
result=opand1*opand2;
}
if(op=='/')
{
//判断是否为0一般把它与我们宏定义的极小值值进行比较,接近于0则视为0
if(fabs(opand2)<MIN)
{
return 0;
}
else
{
result=opand1/opand2;
}
}
return 1;
}
float calinfix(char exp[])
{
float s[maxSize];
int top=-1;
int i=0;
while(exp[i]!='\0')//for(int i=0;exp[i]!='\0';++i)
{
if('0'<=exp[i] && exp[i]<='9')
{
s1[++top1]=exp[i]-'0';
}
else if(exp[i]=='+' || exp[i]== '-' || exp[i]=='*' || exp[i]=='/')//else
{
float opnd1,opnd2,result;
char op;
int flag;
opnd2=s1[top1--];//先出栈的为第二个操作数
opnd1=s1[top1--];//后出栈的为第一个操作数
op=exp[i];
flag=calsub(opnd1,op,opnd2,result);
if(flag==0)
{
std::cout<<"ERROR"<<std::endl;
return 0;
}
s[++top]=result;
}
++i;//每一个判断都需要i后移一位 //用for循环注释掉就行
}
return s[top];
}
用栈实现前缀表达式求值
int calsub(float opand1,char op,float opand2,float &result)
{
if(op=='+')
{
result=opand1+opand2;
}
if(op=='-')
{
result=opand1-opand2;
}
if(op=='*')
{
result=opand1*opand2;
}
if(op=='/')
{
//判断是否为0一般把它与我们宏定义的极小值值进行比较,接近于0则视为0
if(fabs(opand2)<MIN)
{
return 0;
}
else
{
result=opand1/opand2;
}
}
return 1;
}
float calinfix(char exp[],int len)
{
float s[maxSize];
int top=-1;
for(int i=len-1;i>=0;--i)
{
if('0'<=exp[i] && exp[i]<='9')
{
s1[++top1]=exp[i]-'0';
}
else if(exp[i]=='+' || exp[i]== '-' || exp[i]=='*' || exp[i]=='/')//else
{
float opnd1,opnd2,result;
char op;
int flag;
opnd1=s1[top1--];
opnd2=s1[top1--];
op=exp[i];
flag=calsub(opnd1,op,opnd2,result);
if(flag==0)
{
std::cout<<"ERROR"<<std::endl;
return 0;
}
s[++top]=result;
}
}
return s[top];
}