中缀转后缀的程序,及详细的代码说明

测试用例的结果如图
中缀转后缀的程序,及详细的代码说明
源代码如下
#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;
}

详细分析与讲解
中缀转后缀的程序,及详细的代码说明

中缀转后缀的程序,及详细的代码说明


中缀转后缀的程序,及详细的代码说明