Problem Description
对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。
Input
输入一个算术表达式,以‘#’字符作为结束标志。
Output
输出该表达式转换所得到的后缀式。
Example Input
a*b+(c-d/e)*f#
Example Output
ab*cde/-f*+
Hint
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct hh
{
int data[10010];
int top;
};
void main()
{
struct hh *l,*x;
x=(struct hh *)malloc(sizeof(struct hh));
l=(struct hh *)malloc(sizeof(struct hh));
x->top=-1;
l->top=-1;
char a[10010];
int n,i;
scanf("%s",&a);
n=strlen(a);
for(i=0;i<n;i++)
{
if(a[i]=='(')
{
x->top++;
x->data[x->top]=a[i];
}
else if(a[i]==')')
{
while(x->data[x->top]!='(')
{
l->top++;
l->data[l->top]=x->data[x->top];
x->top--;
}
x->top--;
}
else if(a[i]=='-'||a[i]=='+')
{
while(x->data[x->top]=='*'||x->data[x->top]=='/'||x->data[x->top]=='+'||x->data[x->top]=='-')
{
l->top++;
l->data[l->top]=x->data[x->top];
x->top--;
}
x->top++;
x->data[x->top]=a[i];
}
else if(a[i]=='*'||a[i]=='/')
{
while(x->data[x->top]=='*'||x->data[x->top]=='/')
{
l->top++;
l->data[l->top]=x->data[x->top];
x->top--;
}
x->top++;
x->data[x->top]=a[i];
}
else if(a[i]=='#')
{
while(x->top!=-1)
{
l->top++;
l->data[l->top]=x->data[x->top];
x->top--;
}
}
else
{
l->top++;
l->data[l->top]=a[i];
}
}
for(i=0;i<=l->top;i++)
printf("%c",l->data[i]);
printf("\n");
}