VS parse(string& s) { VS v; for (int i = s.FN(' '); i < s.length(); i = s.FN(' ', i)) { char c = s[i]; if (is_num(c)) { int j = s.FN(NUMS, i); if (j == string::npos) { v.PB(s.substr(i)); break; } v.PB(s.substr(i, j - i)); i = j; } else if (is_func(c)) { int j = s.FN(FUNS, i); v.PB(s.substr(i, j - i)); i = j; } else { v.PB(s.substr(i, 1)); i += 1; } } return v; }