Problem Description
对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。
Input
输入一个算术表达式,以‘#’字符作为结束标志。
Output
输出该表达式转换所得到的后缀式。
Sample Input
a*b+(c-d/e)*f#
Sample Output
abcde/-f+
实话实说哈,这个代码我还没看懂,主要是不知道表达式的中缀后缀形式;
但是实验快结束了, 我先记下来,马上更新!!
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int ok(char ch,char sh)
{
if(sh=='(')
return 1;
if((ch=='*'||ch=='/'||ch=='%')&&(sh=='+'||sh=='-'))
return 1;
else return -1;
}
int main()
{
int i=0,top=-1;
char exp[1055],str[1005],ch;
while(scanf("%c",&ch)&&ch!='#')
{
if(ch>='a'&&ch<='z')
exp[i++]=ch;
else if(ch=='(')
str[++top]=ch;
else if(ch==')')
{
while(top!=-1)
{
exp[i++]=str[top];
top--;
if(str[top]=='(')
{
top--;
break;
}
}
}
else
{
if(top==-1||ok(ch,str[top])>0)
{
str[++top]=ch;
}
else
{
while(top>=0&&ok(ch,str[top])<0)
{
exp[i++]=str[top--];
}
str[++top]=ch;
}
}
}
while(top!=-1)
exp[i++]=str[top--];
exp[i]='\0';
printf("%s\n",exp);
return 0;
}