Time Limit: 1000MS Memory limit: 65536K
题目描述
对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。
输入
输入一个算术表达式,以‘#’字符作为结束标志。
输出
输出该表达式转换所得到的后缀式。
示例输入
a*b+(c-d/e)*f#
示例输出
ab*cde/-f*+
提示
#include<stdio.h>
//#include<string.h>
#include<stack>
#include<iostream>
using namespace std;
int main()
{
stack<int>q;
char str[100];
int i;
scanf("%s",&str);
for(i=0;str[i]!='#';i++)
{
if(str[i]>='a'&&str[i]<='z')
printf("%c",str[i]);
else if(str[i]=='(')
q.push(str[i]);
else if(str[i]==')')
{
while(q.top()!='(')
{
printf("%c",q.top());
q.pop();
}
q.pop();
}
else if(str[i]=='+'||str[i]=='-')
{
while(!q.empty()&&q.top()!='(')
{
printf("%c",q.top());
q.pop();
}
q.push(str[i]);
}
else if(str[i]=='*'||str[i]=='/')
{
while(!q.empty()&&q.top()!='('&&(q.top()=='*'||q.top()=='/'))
{
printf("%c",q.top());
q.pop();
}
q.push(str[i]);
}
}
while(!q.empty())
{
printf("%c",q.top());
q.pop();
}
printf("\n");
return 0;
}