0

在这里,我将中缀表达式转换为前缀表达式。

对于某些测试用例,我的结果是完美的。

但是对于某些测试用例,我得到的输出根据某些站点是正确的,但根据其他站点是错误的。所以我对我的代码是否正确感到两难。

例如,如果中缀表达式是:

A+B*C+D

然后根据我的代码输出是:

+A+*BCD

但有些网站提到输出为:

++A*BCD 

对于相同的输入。

#include<stdio.h>
#include<string.h>
int main()
{
    int top=-1,k=0,i,l,top2=-1,j,a,t,m,t1;
    char s[100] ,s2[100],n, main[100];
    char q[100],p[100];
    printf("\nenter string :");
    gets(main);
    for(i=strlen(main)-1;i>=0;i--)
    {
        if(main[i]=='(')
        {
          q[k]=')';
        }
        else if(main[i]==')')
        {
            q[k]='(';
        }
        else
        {
            q[k]=main[i];
        }

        q[k+1]='\0';
        k++;
    }
    k=0;
    strcat(q,")");
    s[++top]='(';
    for(i=0;i<strlen(q);i++)
    {

        if(q[i]>='a' && q[i]<='z'   || q[i]>='A' && q[i]<='Z' || q[i]>='0' && q[i]<='9')
        {
            p[k]=q[i];
            p[k+1]='\0';
            k++;
        }

        else if (q[i]=='(')
        {
            s[++top]=q[i];
        }

        else if (q[i]==')')
        {
            for(j=top;j>=0;j--)
            {
                if(s[j]!='(')
                {
                    s[top--];
                    p[k]=s2[top2];
                    p[k+1]='\0';
                    s2[top2--];
                    k++;

                }
                else
                    break;
            }
            s[top--];

        }
        else if(q[i]=='+' || q[i]=='-' || q[i]=='*' || q[i]=='/' || q[i]=='^' || q[i]=='%')
        {

              if(q[i]=='+' || q[i]=='-')
            {
               n='1';
            }
            else if(q[i]=='*' || q[i]=='/' || q[i]=='%')
            {
                n='2';
            }
            else if (q[i]=='^')
            {
               n='3';
            }

                t=n-48;

             if(top2!=-1)
             {
           for(j=top;j>=0;j--)
           {
              t1=s[j]-48;

               if(t<=t1 )
               {
                    s[top--];
                    p[k]=s2[top2];
                    p[k+1]='\0';
                    k++;
                    s2[top2--];

               }
               else if(s[j]=='(')
                        break;

            }
            }
             s[++top]=n;
             s2[++top2]=q[i];
        }
}
k=0;
for(i=strlen(p)-1;i>=0;i--)
{
    main[k]=p[i];
    main[k+1]='\0';
    k++;
}
printf("\nFINAL ANSWER :\n");
printf("\n%s",main);
}

4

0 回答 0