作者根据数据结构第三版本。李云清 书上的思路和相关代码实现了。
#include<stdio.h>
double read(char f[],int *i)//为了能使用小数,这里使用的是double类型
{
double x=0.0;
int k=0;
while(f[*i]>='0'&&f[*i]<='9')//处理整数部分
{
x=x*10+(f[*i]-'0');//这里是为了把字符串类型改成double类型。*10就是为了凑double类型。如'9'-'0'=9 ,切记'10'-'0'!=10
(*i)++;
}
if(f[*i]=='.')//小数部分
{
(*i)++;
while(f[*i]>='0'&&f[*i]<='9')
{
x=x*10+(f[*i]-'0');
(*i)++;
k++;
}
}
while(k!=0)
{
x=x/10.0;
k=k-1;
}
return(x);
}
double eva(char f[])
{
double obst[100];
int top=0;
int k=0;
int i=0;
double x1,x2;
while(f[i]!='#')
{
if(f[i]>='0'&&f[i]<='9')
{
obst[top]=read(f,&i);
top++;
}
else if (f[i]==' ')
i++;
else if (f[i]=='+')
{
x2=obst[--top];
x1=obst[--top];
obst[top]=x1+x2;
top++;
i++;
}
else if (f[i]=='-')
{
x2=obst[--top];
x1=obst[--top];
obst[top]=x1-x2;
top++;
i++;
}
else if (f[i]=='*')
{
x2=obst[--top];
x1=obst[--top];
obst[top]=x1*x2;
top++;
i++;
}
else if (f[i]=='/')
{
x2=obst[--top];
x1=obst[--top];
obst[top]=x1/x2;
top++;
i++;
}
}
return obst[0];
}
int main()
{
int j=0;
char g[100];
char x;
scanf("%c",&x);
while(x!='!')
{
g[j]=x;
j++;
scanf("%c",&x);
}
double s= eva(g);
printf("%f",s);
}