中缀转后缀 | ||
---|---|---|
Time Limit: 1000 MS | Memory Limit: 1000 KB |
Description
由小写字母{'a','b','c','d',...,'z'}和{'+','-','*','/','(',')'}可以组成一个中缀表达式,现在需要你输出它的后缀表达式。
Input
输入的第一行是一个int型整数T,表示一个有T组数据。
接下来T行,每行一个一个不含空格的字符串,且每个字符串长度都小于1000。该字符串就是中缀表达式。
数据保证输入的表达式一定合法。
Output
输出T行,每行一个后缀表达式,表示求得的结果。输出的表达式同样不含空格。
Sample Input
2
a+b*c+(d*e+f)*g
(a+b)*c/d+f/g
Sample Output
abc*+de*f+g*+
ab+c*d/fg/+
代码结果:
#include<iostream>
#include<stack>
using namespace std;
int priority(char a)
{
if (a == ')')return 0;
else if (a == '+' || a == '-')return 1;
else if (a == '*' || a == '/')return 2;
else if (a == '(')return 3;
else return -1;
}
int in_priority(char a)
{
if (a == '+' || a == '-')return 1;
else if (a == '*' || a == '/')return 2;
else if (a == '(')return 0;
else return -1;
}
int main()
{
int T = 0;
cin >> T;
for (int t = 0; t < T; t++)
{
char ch[1000];
cin >> ch;
stack<char>aba;
int i = 0;
while (ch[i] != ' '&&ch[i]!= '\0')
{
if (97 <= ch[i] && ch[i] <= 122)
{
cout<<ch[i];
}
else if(ch[i]==')')
{
for (; aba.top() != '('&& !aba.empty(); aba.pop())cout <<aba.top();
aba.pop();
}
else
{
if(!aba.empty())
while( in_priority(aba.top()) >= priority(ch[i]))
{
cout << aba.top();
aba.pop();
if (aba.empty())break;
}
aba.push(ch[i]);
}
i++;
}
for (; !aba.empty(); aba.pop())cout << aba.top();
cout << endl;
}
return 0;
}