infix to postfix 完整版
#include<iostream> #include<stack> #include<string> #include<deque> using namespace std; char compare(char tp, char op) { if (((tp == '+' || tp == '-') && (op == '*' || op == '/')) || (tp == '#')) return '<'; else if (tp == '('&&op != ')') return '<'; else if ((tp == '*' || tp == '/' || tp == '+' || tp == '-') && (op == '(')) return '<'; return '>'; } int main() { stack<char>num; stack<char>oper; oper.push('#'); string s; cin >> s; for (int i = 0; i<s.length(); i++) { if (s[i] == '0' || s[i] == '1' || s[i] == '2' || s[i] == '3' || s[i] == '4' || s[i] == '5' || s[i] == '6' || s[i] == '7' || s[i] == '8' || s[i] == '9') num.push(s[i]); else { char comp = compare(oper.top(), s[i]); if (comp == '<') oper.push(s[i]); else if (comp == '>') { if (s[i] == ')') { while (oper.top() != '(') { num.push(oper.top()); oper.pop(); } oper.pop(); } else { num.push(oper.top()); oper.pop(); oper.push(s[i]); } } } } while (oper.top() != '#') { num.push(oper.top()); oper.pop(); } deque<char> d; while (num.size() != 0) { d.push_front(num.top()); num.pop(); } for (auto i = d.begin(); i != d.end(); i++) cout << *i; cout << endl; return 0; }