最后一题过了83%,实在不知道还有什么坑的。。反正直接导致了前两题没时间做了 = = #include <iostream> #include <vector> #include <map> #include <cstring> #include <string> #include <algorithm> using namespace std; string ss; string opst[1005]; int oppos; string allst[1005]; int allpos; int start, len; string numst[1005]; int numpos; map<char, int> opma; bool ischar(char c) { if (c >= 'a' && c <= 'z') return true; if (c >= 'A' && c <= 'Z') return true; if (c >= '0' && c <= '9') return true; return false; } bool isnum(string s) { if (s.length() > 1) return true; if (ischar(s[0])) return true; return false; } string fan(string s) { for (int i = 0; i < s.length(); ++i) { if (s[i] >= 'a' && s[i] <= 'z') { s[i] -= 'a' - 'A'; continue; } if (s[i] >= 'A' && s[i] <= 'Z') { s[i] -= 'A' - 'a'; continue; } } return s; } string fu(string s) { string t(s.rbegin(), s.rend()); return t; } string chen(string s1, string s2) { string rst = ""; rst += s1[0]; for (int i = 1; i < s1.length(); ++i) { rst += s2; rst += s1[i]; } return rst; } string chu(string a, string b) { int flag = 1, m; while(flag) { m = a.find(b); if (m < 0) { flag = false; } else { a.erase(m, b.length()); } } return a; } string jia(string a, string b) { return a + b; } string jian(string a, string b) { int flag = 1, m; m = a.find(b); if (m < 0) { flag = false; } else { a.erase(m, b.length()); } return a; } void solve() { oppos = 0; allpos = 0; start = 0; len = 0; ss = chu(ss, "()"); if (ss[0] == '-') { ss[0] = '='; } for (int i = 1; i < ss.length(); ++i) { if (ss[i] == '-') { if ((!ischar(ss[i-1])) && (ss[i-1]!=')')) { ss[i] = '='; } } } for (int i = 0; i < ss.length(); ++i) { if (ischar(ss[i])) { len ++; continue; } else { if (len != 0) { allst[allpos ++] = ss.substr(start, len); len = 0; } start = i + 1; if (ss[i] == '~' || ss[i] == '=') { opst[oppos ++] = ss.substr(i, 1); continue; } if (ss[i] == '(') { opst[oppos ++] = "("; continue; } if (ss[i] == ')') { while(opst[oppos - 1][0] != '(') { allst[allpos ++] = opst[oppos - 1]; oppos --; } oppos --; continue; } while(oppos > 0 && opma[ss[i]] < opma[opst[oppos - 1][0]]) { allst[allpos ++] = opst[oppos - 1]; oppos --; } opst[oppos ++] = ss.substr(i, 1); } } if (len != 0) { allst[allpos ++] = ss.substr(start, len); } while(oppos > 0) { allst[allpos ++] = opst[oppos - 1]; oppos --; } numpos = 0; for (int i = 0; i < allpos; ++i) { if (isnum(allst[i])) { numst[numpos ++] = allst[i]; continue; } if (allst[i][0] == '~') { numst[numpos - 1] = fan(numst[numpos - 1]); continue; } if (allst[i][0] == '=') { numst[numpos - 1] = fu(numst[numpos - 1]); continue; } if (allst[i][0] == '*') { numst[numpos - 2] = chen(numst[numpos - 2], numst[numpos - 1]); numpos --; continue; } if (allst[i][0] == '/') { numst[numpos - 2] = chu(numst[numpos - 2], numst[numpos - 1]); numpos --; continue; } if (allst[i][0] == '+') { numst[numpos - 2] = jia(numst[numpos - 2], numst[numpos - 1]); numpos --; continue; } if (allst[i][0] == '-') { numst[numpos - 2] = jian(numst[numpos - 2], numst[numpos - 1]); numpos --; continue; } } cout << numst[0] << endl; } int main() { ios::sync_with_stdio(false); //freopen("input.txt", "r", stdin); opma['+'] = 1; opma['-'] = 1; opma['*'] = 2; opma['/'] = 2; opma['~'] = 3; opma['='] = 3; opma['('] = 0; opma[')'] = 0; cin >> ss; solve(); return 0; }
点赞 4

相关推荐

牛客网
牛客网在线编程
牛客网题解
牛客企业服务