题解 | #坐标移动#
坐标移动
https://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
#include <iostream> #include <string> #include <cctype> #include <array> #include <unordered_set> using namespace std; unordered_set<char> smap{'A', 'D', 'S', 'W'}; int regrex_search(string s, int& start, int& step) { if (s[start - 1] == ';' && smap.count(s[start])) { int i = start + 1; if (isdigit(s[i])) { if (s[i + 1] == '\0' || s[i + 1] == ';') { step = stoi(s.substr(i, 1)); return 1; } if (isdigit(s[i + 1]) && (s[i + 2] == ';' || s[i + 2] == '\0')) { step = stoi(s.substr(i, 2)); return 2; } } } return 0; } int main() { string ss; cin >> ss; if (ss == "") { return 0; } ss = ';' + ss; array<int, 2> idx = {0, 0}; for (int i = 0; i < ss.length(); ++i) { int step = 0; int id_i = regrex_search(ss, i, step); if (id_i) { switch (ss[i]) { case 'A': idx[0] -= step; break; case 'D': idx[0] += step; break; case 'S': idx[1] -= step; break; case 'W': idx[1] += step; break; } i += id_i; } } cout << idx[0] << "," << idx[1] << endl; }