題目點擊打開鏈接
算術表達式的轉換
Time Limit: 1000MS Memory limit: 65536K
題目描述
輸入
輸出
示例輸入
a*b+(c-d/e)*f#
示例輸出
+*ab*-c/def a*b+c-d/e*f ab*cde/-f*+
提示
來源
示例程序
#include <stdio.h>
#include <string.h>
int find(char x)
{
if(x=='+'||x=='-')return 1;
if(x=='*'||x=='/')return 2;
if(x=='(')return 3;
if(x==')')return 4;
}
int main()
{
int i,j,k;
char s[1111],m[1111],zhan[1111],c;
scanf("%s",s);
i=strlen(s)-2;
j=0;
k=0;//qian
while(i>=0)
{
c=s[i--];
if('a'<=c&&c<='z')
{
m[j++]=c;
}
else
{
if(k==0||c==')')
{
zhan[k++]=c;
}
else
{
if(c=='(')
{
while(zhan[k-1]!=')')
{
m[j++]=zhan[k-1];
k--;
}
k--;
}
else
{
if(find(zhan[k-1])>find(c))//此處沒有等於
{
if(zhan[k-1]!=')')
{
m[j++]=zhan[k-1];
k--;
}
zhan[k++]=c;
}
else zhan[k++]=c;
}
}
}
}
while(k>0)
{
m[j++]=zhan[k-1];
k--;
}
for(i=j-1; i>=0; i--)
{
printf("%c",m[i]);
}
printf("\n");
//zhong
i=0;
while(s[i]!='#')
{
if(s[i]!='('&&s[i]!=')')
printf("%c",s[i]);
i++;
}printf("\n");
i=0;
j=0;
k=0;//hou
while(s[i]!='#')
{
c=s[i++];
if('a'<=c&&c<='z')
{
m[j++]=c;
}
else
{
if(k==0||c=='(')
{
zhan[k++]=c;
}
else
{
if(find(zhan[k-1])>=find(c))//此處有同級輸出
{
if(find(zhan[k-1])!=3)
{
m[j++]=zhan[k-1];
k--;
}
zhan[k++]=c;
}
else
{
if(c==')')
{
while(zhan[k-1]!='(')
{
m[j++]=zhan[k-1];
k--;
}
k--;
}
else zhan[k++]=c;
}
}
}
}
while(k>0)
{
m[j++]=zhan[k-1];
k--;
}
for(i=0; i<j; i++)
{
printf("%c",m[i]);
}
printf("\n");
return 0;
}