先用 stringstream 分隔分号 ; 得到每次操作的指令字符串 t ,然后 regex_match 全文匹配 t 的第一个字符后是否全为数字,接着由 t 的第一个字符判断此次操作的移动方向来对 pair 记录的坐标(0,0)进行操作。
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); string s,t; while(getline(cin,s)) { stringstream ss(s); pair<int,int> p(0,0); while(getline(ss,t,';')) { if(t.empty()) continue; string _ = t.substr(1); if(regex_match(_,regex("[0-9]*"))) { switch(t[0]) { case 'A': p.first -= stoi(_); break; //左移 case 'D': p.first += stoi(_); break; //右移 case 'W': p.second += stoi(_); break; //上移 case 'S': p.second -= stoi(_); break; //下移 default: break; //无效 } } } cout << p.first << "," << p.second << endl; } return 0; }