中缀转后缀
作者:
崩溃青蛙
,
2024-07-19 18:28:34
,
所有人可见
,
阅读 4
#include <iostream>
#include <stack>
#include <cstring>
#include <unordered_map>
#include <algorithm>
using namespace std;
stack<char> op;
void eval()
{
auto c=op.top();
op.pop();
cout<<c<<' ';
}
int main()
{
string str;
cin>>str;
for(int i=0;i<str.size();i++)
{
unordered_map<char,int> h{{'+',1},{'-',1},{'*',2},{'/',2}};
if(isdigit(str[i]))
{
int x=0,j=i;
while(j<str.size()&&isdigit(str[j]))
{
x=x*10+str[j]-'0';
cout<<x<<' ';
j++;
}
i=j-1;
}
else if(str[i]=='(') op.push(str[i]);
else if(str[i]==')')
{
while(op.top()!='(')
eval();
op.pop();
}
else
{
while(op.size()&&op.top()!='('&&h[op.top()]>=h[str[i]])
eval();
op.push(str[i]);
}
}
while(op.size())eval();
return 0;
}