convert.c

来自「一道convert的C语言作业题」· C语言 代码 · 共 106 行

C
106
字号
#include<stdio.h>
#include<string.h>
char str[50][1000],si[1000],t[1000];
long gra[1000];
int main(){
    long l,sn,i,j,k;
    gets(si);
    l=strlen(si);
    sn=0;
    i=0;j=0;
    while (j<l){
          while ((j<l)&&(si[j]!=' '))
                j++;
          if ((j==i+1)&&(si[i]=='+')){
             sn--;
             if (gra[sn-1]<0){
                strcpy(t,str[sn-1]);
                strcpy(str[sn-1],"(");
                strcat(str[sn-1],t);
                strcat(str[sn-1],")");
             }
             strcat(str[sn-1],"+");
             if ((gra[sn]==1)||(gra[sn]==2)||(gra[sn]<0)){
                strcpy(t,str[sn]);
                strcpy(str[sn],"(");
                strcat(str[sn],t);
                strcat(str[sn],")");
             }
             strcat(str[sn-1],str[sn]);
             gra[sn-1]=1;
             gra[sn]=0;
          }
          else if ((j==i+1)&&(si[i]=='-')){
               sn--;
               if (gra[sn-1]<0){
                  strcpy(t,str[sn-1]);
                  strcpy(str[sn-1],"(");
                  strcat(str[sn-1],t);
                  strcat(str[sn-1],")");
               }
               strcat(str[sn-1],"-");
               if ((gra[sn]==1)||(gra[sn]==2)||(gra[sn]<0)){
                  strcpy(t,str[sn]);
                  strcpy(str[sn],"(");
                  strcat(str[sn],t);
                  strcat(str[sn],")");
               }
               strcat(str[sn-1],str[sn]);
               gra[sn-1]=2;
               gra[sn]=0;
          }
          else if ((j==i+1)&&(si[i]=='*')){
               sn--;
               if ((gra[sn-1]==1)||(gra[sn-1]==2)||(gra[sn-1]<0)){
                  strcpy(t,str[sn-1]);
                  strcpy(str[sn-1],"(");
                  strcat(str[sn-1],t);
                  strcat(str[sn-1],")");
               }
               strcat(str[sn-1],"*");
               if (gra[sn]!=0){
                  strcpy(t,str[sn]);
                  strcpy(str[sn],"(");
                  strcat(str[sn],t);
                  strcat(str[sn],")");
               }
               strcat(str[sn-1],str[sn]);
               gra[sn-1]=3;
               gra[sn]=0;
          }
          else if ((j==i+1)&&(si[i]=='/')){
               sn--;
               if ((gra[sn-1]==1)||(gra[sn-1]==2)||(gra[sn-1]<0)){
                  strcpy(t,str[sn-1]);
                  strcpy(str[sn-1],"(");
                  strcat(str[sn-1],t);
                  strcat(str[sn-1],")");
               }
               strcat(str[sn-1],"/");
               if (gra[sn]!=0){
                  strcpy(t,str[sn]);
                  strcpy(str[sn],"(");
                  strcat(str[sn],t);
                  strcat(str[sn],")");
               }
               strcat(str[sn-1],str[sn]);
               gra[sn-1]=4;
               gra[sn]=0;
          }
          else{
               for (k=i;k<j;k++)
                   str[sn][k-i]=si[k];
               str[sn][j-i]='\0';
               if (str[sn][0]=='-')
                  gra[sn]=-1;
               else
                   gra[sn]=0;
               sn++;
          }
          i=j+1;j=i;
    }
    printf("%s\n",str[0]);
    scanf("%ld",&sn);
    return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?