编写一程序,将中缀表达式转化为后缀表达式(含括号情况)。
从expr.in文件中读取输入,将结果输出到expr.out文件中。
假设输入只有字母与符号
输入示例:
a-b*(c+d)
输出示例:
abcd+*-
参考题解:
使用vector模拟栈(个人习惯) 用stack更方便
#include<fstream>
#include<vector>
using namespace std;
int pri(char c){
if(c=='(') return 0;
if(c=='*'||c=='/') return 2;
if(c=='+'||c=='=') return 1;
return 0;
}
int main(){
ifstream ifs("./expr.in");
ofstream ofs("./expr.out");
string s;
ifs>>s;
vector<char> v;
for(int i=0;i<s.length();i++){
if(isalpha(s[i])){ //s[i]为字符
ofs<<s[i];
}else if(s[i]=='('){ //s[i]为"("
v.push_back(s[i]);
continue;
}else if(s[i]!=')'){ //s[i]为非")"运算符
while(v.size()!=0&&pri(s[i])<=pri(v[v.size()-1])){
ofs<<v[v.size()-1];
v.pop_back();
}
v.push_back(s[i]);
}else{ //s[i]为")"
while(v[v.size()-1]!='('){
ofs<<v[v.size()-1];
v.pop_back();
}
v.pop_back();
}
}
while(v.size()!=0){
ofs<<v[v.size()-1];
v.pop_back();
}
return 0;
}