将一个只包含 +, -, *, / , %,(,)的非负整数计算表达式的 中缀表达式 转化为 后缀表达式
#include <cstdio>
#include <cctype>
#include <stack>
std::stack<char> opr;
int order(char c) {return (c == '+' || c == '-') ? 0 : 1;}
int main(){
char c, pre = ' ';
while (~(c = getchar()) && c != '\n') {
if (isdigit(c)) {
putchar(c);
pre = c;
} else if (c == '(') opr.push(c);
else if (c == ')') {
while (opr.top() != '(') {
pre = opr.top();
printf("%c ", pre);
opr.pop();
}
opr.pop();
}else if (c != ' ') {
while (true){
if (opr.empty() || opr.top() == '(' || order(c) > order(opr.top())) {
opr.push(c);
break;
} else {
pre = opr.top();
printf("%c ", pre);
opr.pop();
}
}
}else{
if (isdigit(pre)){
putchar(' ');
pre = ' ';
}
}
}
if (isdigit(pre)) putchar(' ');
while (!opr.empty()){
printf("%c ", opr.top());
opr.pop();
}
return 0;
}
/*
输入示例:
681 + 62 - 83 % 5
输出示例:
681 62 + 83 5 % -
*/