在这里,我将中缀表达式转换为前缀表达式。
对于某些测试用例,我的结果是完美的。
但是对于某些测试用例,我得到的输出根据某些站点是正确的,但根据其他站点是错误的。所以我对我的代码是否正确感到两难。
例如,如果中缀表达式是:
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);
}