中缀转后缀的程序,及详细的代码说明
测试用例的结果如图

源代码如下
#include
#include
#include
#include
#include
void fx(char arr[]);
int main(void)
{
char arr[]="3+5*(2-1)";
char brr[]="X=A+B*(C-D)/E";
char crr[]="3.14*(5.0*5.0)";
fx(arr);
fx(brr);
fx(crr);
printf("%s\n",arr);
printf("%s\n",brr);
printf("%s\n",crr);
return 0;
}
void fx(char arr[])
{
int len=0;
for(int i=0;arr[i];i++)
{
len++;
}
char *p=(char *)malloc(sizeof(char)*len);
char *tmp=(char *)malloc(sizeof(char)*len);
strcpy(p,arr);
len--;
int len2=0;
for(int i=0;arr[i];i++)
{
if(arr[i]!='(' && arr[i]!=')')
{len2++;}
}
for(int i=0,j=0,k=0;j
{
if(isdigit(p[i])||p[i]=='.'||isalpha(p[i]))
{
arr[j]=p[i];
j++;
}
if(p[i]=='+'||p[i]=='-'||p[i]=='*'||p[i]=='/'||p[i]=='('||p[i]=='=')
{
tmp[k]=p[i];
if(p[i]=='=')
{
tmp[++k]='0';
}
else if(p[i]=='+'||p[i]=='-')
{ tmp[++k]='1';}
else if(p[i]=='*'||p[i]=='/')
{ tmp[++k]='2';}
else if(p[i]=='(')
{ tmp[++k]='3';}
k++;
}
if(p[i]==')')
{
for(k-=2;tmp[k]!='(';k-=2)
{
arr[j]=tmp[k];
j++;
}
continue;
}
if(k-1>=0 &&tmp[k-1]<=tmp[k-3]&&tmp[k-4]!='(')
{
arr[j]=tmp[k-4];
j++;
tmp[k-4]=tmp[k-2];
tmp[k-3]=tmp[k-1];
k-=2;
}
if(i>len)
{
for(k=k-2;k>=0;k-=2)
{
arr[j]=tmp[k];
j++;
}
}
}
arr[len2]='\0';
free(tmp);
p=NULL;
tmp=NULL;
}
详细分析与讲解