链接:https://pintia.cn/problem-sets/15/problems/827
跟csp认证模拟题有一拼的模拟题
#include <iostream> #include <stack> #include <map> using namespace std; const int INF = 1e9; stack<int> stk; map<char ,int> mp; string s; int F; void print(int &start) { if(F) printf(" "); F = 1; if(s[start] == '+') start ++; if(s[start] == '-') start ++, printf("-"); for(int i = start; i <= s.size(); ++i) { if(isdigit(s[i]) || s[i] == '.') cout << s[i]; else { start = i - 1; break; } } } int main() { mp['*'] = mp['/'] = 1; mp['('] = -1; cin >> s; for(int i = 0; i < s.size(); ++i) { if(s[i] == '(') stk.push(s[i]); else if(isdigit(s[i]) || (i && s[i - 1] == '(') || (!i && (s[i] == '+' || s[i] == '-'))) print(i); else { if(s[i] == ')') { while(!stk.empty() && stk.top() != '(') { if(F) printf(" "); F = 1; printf("%c", stk.top()); stk.pop(); } stk.pop(); } else { while(!stk.empty() && mp[stk.top()] >= mp[s[i]]) { if(F) printf(" "); F = 1; printf("%c", stk.top()); stk.pop(); } stk.push(s[i]); } } } while(!stk.empty()) { if(F) printf(" "); F = 1; printf("%c", stk.top()); stk.pop(); } }