中缀转后缀(杭X03-3班)
2024-07-30 17:04:23
发布于:浙江
中缀转后缀:
#include<bits/stdc++.h>
using namespace std;
char s[105],ans[105];//存储输入表达式和存储结果
int level(char s){//规定优先级
if(s == '+' || s== '-') return 1;//加减优先级低
else if(s == '*' || s == '/') return 2;//乘除优先级高
}
void infix_to_postfix(char str[]){
stack<char> s;//存储符号
int id = 0;
for(int i = 0;str[i] != '\0';i++){//遍历表达式
if(str[i] >= 'a' && str[i] <= 'z') ans[id++] = str[i];//碰到操作数,加入表达式
else if(str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '/'){//碰到运算符
if(s.empty() || level(str[i]) > level(s.top())){//若符号栈为空或当前优先级>栈顶优先级则直接进栈
s.push(str[i]);
}else{
while(!s.empty() && level(s.top()) >= level(str[i])){//判空后再用top()
if(s.top() == '(') break; //依次弹出优先级大的符号,遇到(则停止
ans[id++] = s.top();
s.pop();
}
s.push(str[i]);//把字符压栈
}
}else{//碰到界限符
if(str[i] == '(') s.push(str[i]);
else if(str[i] == ')'){
while(s.top() != '('){
ans[id++] = s.top();
s.pop();
}
s.pop();//左括号出栈
}
}
}
while(!s.empty()){//弹出剩余运算符
ans[id++] = s.top();
s.pop();
}
}
int main(){
cin >> s;
infix_to_postfix(s);
cout << ans;
return 0;
}
这里空空如也
有帮助,赞一个