背景参考我的另一篇:表达式求值
C++ code:
#include<bits/stdc++.h>
using namespace std;
int pri(char op){
if(op =='*'|| op=='/') return 2;
if(op=='+'|| op=='-') return 1;
if(op=='(') return 0;
}
bool deal(string &str,string &ans){
stack<char>s;
for(int i=0;i<str.size();){
if(str[i]>='0' && str[i]<='9'){
while(str[i]>='0' && str[i]<='9'){
ans+=str[i],i++;
}
}
else if(s.empty() || str[i]=='(') s.push(str[i++]);
else if(str[i]==')'){
while(s.top()!='('){
ans+=s.top();
s.pop();
}
s.pop(); //')'不输出
}
else {//优先级比较
while(pri(str[i])<=pri(s.top())){
ans+=s.top();
s.pop();
if(s.empty()) break;
}
s.push(str[i++]);
}
}
while(!s.empty()){
ans+=s.top();
s.pop();
}
return true;
}
int main(){
string orig,final;
cin>>orig;
deal(original,final);
cout<<endl<<final<<endl;
return 0;
}
测试: