算法思路來自于王道的數據結構
#include <iostream>
#include <stack>
#include <map>using namespace std;
string eq;
stack<char> op;
string rst = "";
map<char, int> dict;// 獲取優先級
int getPrio(char op)
{if (op == '+')return 1;if (op == '-')return 1;if (op == '*')return 2;if (op == '/')return 2;return 0;
}int main()
{cin >> eq;for (int i = 0; i < eq.length(); ++i){//是操作字符直接壓入 后綴表達式中if (eq[i] >= 65 && eq[i] <= 90)rst += eq[i];else{if (op.empty() || eq[i] == '(') // 棧為空或者為'('直接入棧(優先判斷棧是否為空)op.push(eq[i]);else if (eq[i] == ')') // 如果是右括號執行相應邏輯{while (op.top() != '('){char ch = op.top();rst += ch;op.pop();}op.pop(); // 彈出'('}else{while (getPrio(eq[i]) <= getPrio(op.top())) // 當前符號優先級大于棧頂符號{rst += op.top();op.pop();if (op.empty())break;}op.push(eq[i]); // 壓入當前符號}}}while (!op.empty()){char ch = op.top();rst += ch;op.pop();}cout << rst;return 0;
}