题目描述
对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。
输入
输入一个算术表达式,以‘#’字符作为结束标志。
输出
输出该表达式转换所得到的后缀式。
示例输入
a*b+(c-d/e)*f#
示例输出
ab*cde/-f*+
提示
来源
示例程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[50],zhan[50] = {'\0'},st[50];
char *p = st;
int tmp = -1,k = 0,i,j;
for(i = 0;; i++)
{
scanf("%c",&st[i]);
if(st[i] == '#')
break;
}
p = st;
i = 0;
while(*p != '#')
{
if(*p == '(')
{
zhan[++tmp] = *p;
}
else if(*p == ')')
{
while(zhan[tmp] != '(')
{
str[i++] = zhan[tmp--];
}
tmp--;
}
else if(*p == '+' || *p == '-' || *p == '*' || *p == '/')
{
if(tmp == -1 || ((zhan[tmp] == '+' || zhan[tmp] == '-' || zhan[tmp] == '(')&&(*p == '*' || *p == '/')))
zhan[++tmp] = *p;
else if(zhan[tmp] == '(')
zhan[++tmp] = *p;
else
{
while(1)
{
str[i++] = zhan[tmp--];
if(zhan[tmp] == '(' || tmp == -1)
{
zhan[++tmp] = *p;
break;
}
}
}
}
else
{
str[i++] = *p;
}
p++;
}
while(tmp != -1)
{
str[i++] = zhan[tmp--];
}
for(j = 0;j<i;j++)
printf("%c",str[j]);
printf("\n");
return 0;
}