链接:表达式转换
思路: 中缀转后缀的思路比较简单,对于数字直接输出,符号需要建立栈来维护,规则如下:
- 栈空或者左括号,直接入栈;
- 遇到右括号,不断出栈直到栈空或者遇到左括号,最后弹出左括号。
- 其他符号,从栈顶开始,弹出栈内比当前符号优先级高或者相等的符号,然后将当前符号入栈。
- 最后要把栈中所有符号输出。
此题比较坑的地方就是样例会给出一些比较难处理的表达式,比如以负号开头,左括号后的正负号,小数,这些情况需要分开处理。这里可以一并统一到数字处理的分支里,同时也把保证输出格式的处理语句放到这个分支里,因为第一次输出必定包含在数字处理的分支里。(减少分支)
代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
char in[25];
stack<char> s;
map<char,int> prior;
prior['/'] = prior['*'] = 1;
prior['+'] = prior['-'] = 0;
bool<