#include<iostream>
#include<string>
#include<stack>
using namespace std;
int Locate(char e)
{
switch (e)
{
case '#': return -2;
case '(': return -1;
case ')': return 1;
case '+': return 2;
case '-': return 2;
case '*': return 3;
case '/': return 3;
default:
break;
}
return 0;
}
int main()
{
string str, str0; cin >> str;
stack<char> s;
s.push('#');
for (int i = 0; i < str.length(); i++)
{
int lv = Locate(str[i]);
if (lv)
{
if (lv == 1)
{
while (s.top() != '(')
{
str0 += s.top();
s.pop();
}
s.pop();
}
else if (lv == -1 || lv > Locate(s.top()))
s.push(str[i]);
else if (lv <= Locate(s.top()))
{
str0 += s.top();
s.pop();
}
else
str0 += str[i];
}
else
str0 += str[i];
}
while (!s.empty())
{
if( s.top() != '#' ) str0 += s.top();
s.pop();
}
cout << str0;
return 0;
}
SWUST数据结构--中缀表达式转后缀
最新推荐文章于 2023-03-09 15:09:58 发布
