标签:ret 顺序 结果 space turn code for 表达式 icp
#include<iostream> #include<map> #include<stack> #include<string> using namespace std; string postFix(const string str) { map<char,int> isp; map<char,int> icp; // isp栈内优先级,icp入栈优先级 isp.insert(pair<char, int> (‘*‘,1)); isp.insert(pair<char, int> (‘/‘,1)); isp.insert(pair<char, int> (‘%‘,1)); isp.insert(pair<char, int> (‘+‘,2)); isp.insert(pair<char, int> (‘-‘,2)); isp.insert(pair<char, int> (‘(‘,3));isp.insert(pair<char, int> (‘)‘,4)); isp.insert(pair<char, int> (‘#‘,10)); icp.insert(pair<char, int> (‘(‘,0)); icp.insert(pair<char, int> (‘*‘,1)); icp.insert(pair<char, int> (‘/‘,1)); icp.insert(pair<char, int> (‘%‘,1)); icp.insert(pair<char, int> (‘+‘,2)); icp.insert(pair<char, int> (‘-‘,2)); icp.insert(pair<char, int> (‘)‘,4)); string pStr; stack<char> sta; sta.push(‘#‘); for (auto c : str) { if ((c >= ‘0‘ && c <= ‘9‘) || (c >= ‘a‘ && c <= ‘z‘)) { pStr.append(1, c); } else { if (c == ‘)‘) { char y = sta.top(); sta.pop(); while (y != ‘(‘) { pStr.append(1, y); y = sta.top(); sta.pop(); } } else { char y = sta.top(); sta.pop(); while (isp[y] <= icp[c]) { pStr.append(1, y); y = sta.top(); sta.pop(); } sta.push(y); sta.push(c); } } } while (!sta.empty()) { char y = sta.top(); sta.pop(); if (y != ‘#‘) { pStr.append(1, y); } } return pStr; } int main() { string str, pStr; cin>>str; pStr = postFix(str); cout<<pStr<<endl; return 0; }
标签:ret 顺序 结果 space turn code for 表达式 icp
原文地址:http://www.cnblogs.com/mycodepqq/p/7502639.html