#include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; static vector<string> split(string& input, char delimiter); bool haveTwoChar(string& input); struct Token { string alpha; string digites; int num; }; Token getToken(string& input); vector<int> getPosition(string& input); int main() { string input; cin >> input; vector<string> tokens = split(input, ';'); vector<string> legalTokens; int x = 0, y = 0; // 遍历 字符串数组,过滤掉不合法的字符串 for (auto k : tokens) { // 不能为空,不能只有一个字符或数字,不能大于4个字节长度 if (k.empty() || k.size() == 1 || k.size() >= 4) continue; // 首字母不是 A/D/W/S if (k[0] != 'A' && k[0] != 'S' && k[0] != 'D' && k[0] != 'W') continue; // 不能有两个字母 if (haveTwoChar(k)) continue; legalTokens.push_back(k); } for (string k : legalTokens) { vector<int> l = getPosition(k); x += l[0]; y += l[1]; //cout << k << ", x = " << l[0] << ", y = " << l[1] << endl; } cout << x << "," << y << endl; return 0; } // 根据 分号 分割字符串 为数组 vector<string> split(string& input, char delimiter) { vector<string> tokens; string token; for (char c : input) { if (c == delimiter) { tokens.push_back(token); token.clear(); } else { token += c; } } return tokens; } // 判读字符串是否有超过两个字符 bool haveTwoChar(string& input) { int sum = 0; for (char c : input) { if (isalpha(c)) sum++; } return sum > 1; } // 处理字符串 分离 首字母 和 后面的数字 Token getToken(string& input) { Token result; for (char c : input) { if (isalpha(c)) { result.alpha = c; } else if (isdigit(c)) { result.digites += c; } } result.num = stoi(result.digites); return result; } // 返回移动的距离 vector<int> getPosition(string& input) { vector<int> result = vector<int>(2, 0); string digites; for (char c : input) { if (isdigit(c)) { digites += c; } } int num = stoi(digites); switch (input[0]) { case 'A': result[0] = (-1) * num; break; case 'S': result[1] = (-1) * num; break; case 'D': result[0] = num; break; case 'W': result[1] = num; break; } return result; }