#include<bits/stdc++.h>
using namespace std;
bool C[128][128];
stack<char> a;
string s;
int main(){
C['+']['-']=true;
C['+']['+']=true;
C['+']['*']=false;
C['+']['/']=false;
C['-']['-']=true;
C['-']['+']=true;
C['-']['*']=false;
C['-']['/']=false;
C['*']['-']=true;
C['*']['+']=true;
C['*']['*']=true;
C['*']['/']=true;
C['/']['-']=true;
C['/']['+']=true;
C['/']['*']=true;
C['/']['/']=true;//统计表格
cin>>s;
for(int i=0;i<s.size();i++){
if(s[i]>='0'&&s[i]<='9')cout<<s[i];//如果是数字直接输出
else if(a.size()==0){//如果栈顶为空加入
a.push(s[i]);
}
else if(s[i]==')'){
while(a.top()!='('){
cout<<a.top();
a.pop();
}
a.pop();
}//如果等于右括号,右括号到左括号之间的符号全部输出
else if(s[i]=='('){
a.push(s[i]);
}//如果等于左括号,直接入栈
else{
if(C[a.top()][s[i]]==false){
a.push(s[i]);
}//如果栈顶元素优先级高,弹出
else{
while(C[a.top()][s[i]]==false&&a.size()!=0)
{
cout<<a.top();
a.pop();
}
a.push(s[i]);
}//否则弹出比s[i]高的元素,知道不比s[i]高或栈为空停止,加入s[i]
}
}
while(a.size()!=0){
cout<<a.top();
a.pop();
}//以防有剩余,输出
return 0;
}
蒟蒻中缀表达式赚后缀表达式出错,这个式子(3+4)∗5−6输出的是34+56−∗,正解是34+5∗6−,求调。
验证码:qwqp