Проблема преобразования префиксного выражения в префиксное - PullRequest
0 голосов
/ 17 апреля 2020

Здесь я преобразую инфиксное выражение в префиксное выражение.

Для некоторых тестовых случаев мой результат идеален.

Но для некоторых тестовых случаев я получаю вывод, который является правильным для некоторых сайтов, но неправильным для других сайтов. Поэтому передо мной стоит дилемма: правильный ли мой код или нет.

Например, если инфиксное выражение равно:

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);
}

...