前缀求值+后缀转前缀
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
char *chartostr(char c)
{
char *s;
s=(char *)malloc(sizeof(char)*2);
if(s==NULL)
return NULL;
s[0]=c;
s[1]='\0';
return s;
}
char *change(char *c)
{
char *s,*e1,*e2,*stack[20];
int i,top=-1;
for(i=0;c[i]!='\0';i++)
{
s=chartostr(c[i]);
if(c[i]=='+'||c[i]=='-'||c[i]=='/'||c[i]=='*')
{
e2=stack[top--];
e1=stack[top--];
s=strcat(s,strcat(e1,e2));
}
stack[++top]=s;
}
s=stack[top--];
if(top==-1)
return s;
else
return NULL;
}
int op(char b,int a,int c)
{
if(b=='+') return a+c;
if(b=='*') return a*c;
if(b=='-') return a-c;
if(b=='/')
{
if(c==0)return 0;
else
return a/c;
}
}
int pre(char *ch)
{
int top=-1,stack[20],a,c,i;
char b;
for(i=0;ch[i]!='\0';i++)
{
if(ch[i]>='0' && ch[i]<='9')
{
if(stack[top]=='+'||stack[top]=='-'||stack[top]=='/'||stack[top]=='*')
stack[++top]=ch[i]-'0';
else
{
c=ch[i]-'0';
while(stack[top]!='+'&&stack[top]!='-'&&stack[top]!='/'&&stack[top]!='*'&&top>0)
{
a=stack[top--];
b=stack[top--];
c=op(b,a,c);
}
stack[++top]=c;
}
}
else
stack[++top]=ch[i];
}
return stack[top];
}
int main()
{
char c[]="123+4*+5-";
char *s=change(c);
puts(s);
printf("sum=%d",pre(s));
system("pause");
return 0;
}