目录
一、方法
中缀表达式转后缀表达式的方法:
1.遇到操作数:直接输出(添加到后缀表达式中)
2.栈为空时,遇到运算符,直接入栈
3.遇到左括号:将其入栈
4.遇到右括号:执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,左括号不输出。
5.遇到其他运算符:加减乘除:弹出所有优先级大于或者等于该运算符的栈顶元素,然后将该运算符入栈(“*/”的优先级比“+-”高)
6.最终将栈中的元素依次出栈,输出。
二、代码
#include<iostream>
#include<stack>
using namespace std;
int main(){
stack <char> sop;
string strout;
string strin;
cin>>strin;
int pr[1256]={0};
pr['+']=0;
pr['-']=0;
pr['*']=1;
pr['/']=1;
pr['(']=-1;
//cout<<strin<<endl;
for(int i=0;i<strin.length();i++)
{
if(strin[i]>='0' && strin[i]<='9')
{
strout.push_back(strin[i]);
}
else if(sop.empty())
{
sop.push(strin[i]);
}
else if(strin[i]=='(')
{
sop.push(strin[i]);
}
else if(strin[i]==')')
{
while(sop.top()!='(')
{
strout.push_back(sop.top());
sop.pop();
}
sop.pop();
}
else
{
while(sop.empty()==false && pr[sop.top()]>=pr[strin[i]] )
{
strout.push_back(sop.top());
sop.pop();
}
sop.push(strin[i]);
}
}
while(sop.empty()==false)
{
strout.push_back(sop.top());
sop.pop();
}
cout<<strout<<endl;
return 0;
}