首先需要对字符串进行分割,把每一条指令放进vector;再对每条指令进行检查,不合法直接忽略,合法则进行模拟即可~
#include <bits/stdc++.h> using namespace std; void solve() { string s; cin >> s; vector<string> m; size_t j = 0, i = 0; while (1) { i = s.find(";", i + 1); //cerr << i << endl; if (i == string::npos) { m.push_back(s.substr(j, s.size() - j - 1)); break; } else { m.push_back(s.substr(j, i - j)); } //cerr << m.back() << endl; j = i + 1; } auto check = [](string& s) { if (s.size() <= 1) return false; if (s[0] != 'A' && s[0] != 'W' && s[0] != 'S' && s[0] != 'D') return false; for (int i = 1; i < s.size(); ++i) { if (!isdigit(s[i])) return false; } return true; }; int x = 0, y = 0; for (auto& s : m) { if (!check(s)) continue; int d = stoi(s.substr(1)); if (s[0] == 'W') y += d; else if (s[0] == 'S') y -= d; else if (s[0] == 'A') x -= d; else x += d; } cout << x << "," << y; } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); solve(); return 0; }