无标题

Run Settings
LanguageC++
Language Version
Run Command
#include<string> #include<cctype> #include<iostream> #include<utility> #include <functional> using namespace std; bool getint(string &s, int &a) { int ret = 0; if (s.size() == 0 || !isdigit(s[0])) return false; for (int i = 0, n = (int)s.size(); i < n; i++) { if (isdigit(s[i])) ret = ret * 10 + s[i] - '0'; else { s = s.substr(i); a = ret; return true; } } s = ""; a = ret; return true; } bool getop(string &s, char &a) { if (s.size() == 0 || !isgraph(s[0])) return false; switch (s[0]) { case '+': a = '+'; s = s.substr(1); return true; break; case '-': a = '-'; s = s.substr(1); return true; break; case '*': a = '*'; s = s.substr(1); return true; break; case '/': a = '/'; s = s.substr(1); return true; default: return false; break; } } bool jisuan(int &a, int &b, char &q) { if (a == 0 && b == 0) return false; switch (q) { case '+': a += b; b = 0; return true; break; case '-': a -= b; b = 0; return true; break; case '*': a *= b; b = 0; return true; break; case '/': a /= b; b = 0; return true; break; } } template <typename T> //using parser = bool(*)(string &, T &); using parser = function<bool(string &, T &)>; template <typename T1, typename T2> /*bool seq(parser <T1>f1, parser <T2>f2, string &s, pair<T1, T2> &out) { string w=s; T1 a; T2 b; if (!f1(s, a)) { s = w; return false; } if (!f2(s, b)) { s = w; return false; } out.first = a; out.second = b; return true; }*/ parser<pair<T1, T2>> seq(parser<T1> f1, parser<T2> f2) { return [=](string &s, pair<T1, T2>&out) { string w = s; T1 a; T2 b; if (!f1(s, a)) { s = w; return false; } if (!f2(s, b)) { s = w; return false; } out.first = a; out.second = b; return true; }: } int main() { string s; cin >> s; int a, b; bool i = true; char q; pair<char,int> out; getint(s, a); while (seq(getop, getint)(s, out)) jisuan(a, out.second, out.first); cout << a << endl; system("pause"); }
Editor Settings
Theme
Key bindings
Full width
Lines