由于坐标一定是;分割,所以每次都把第一个分号前面的字符串得到,然后判断是否合法,进而对坐标进行加加减减,就可以得到最终的目标;
而且首先判断是否合法也有一个好处,就是可以避免非法情况进入正常的处理流程;

string  a;
a.find(';'); 返回第一个`;`的位置 
a.substr(0, len);
a.erase(0, len + 1); //需要包括分号
#include<bits/stdc++.h>
using namespace std;

unordered_set<char> st{'W', 'S', 'A', 'D'};

bool isValid(string& s) {
    if (s.size() > 3 || s.size() < 2) return false;
    if (!st.count(s[0])) return false;
    for (int i = 1; i < s.size(); ++i) {
        if (s[i] < '0' || s[i] > '9') //不是字符
            return false;
    }
    return true;
}

int getDistance(string& s) {
    int d = 0;
    for (int i = 1; i < s.size(); ++i)
        d = d * 10 + (s[i] - '0');
    return d;
}

int main() {
    /*
    直接在字符串中找';',分号前的字符串就是可能为合法坐标的组合,也就是,需要编写函数,
    用于判断坐标是否合法
    */
    string s;
    while (cin >> s) {
        int len = s.length();
        int X = 0, Y = 0, Distance = 0;
        while (s.size() > 0) {
            int len = s.find(';');
            string cur = s.substr(0, len);
            //判断坐标组合是否合法
            if (isValid(cur)) {
                Distance = getDistance(cur);
                if (cur[0] == 'W') Y += Distance;
                if (cur[0] == 'S') Y -= Distance;
                if (cur[0] == 'A') X -= Distance;
                if (cur[0] == 'D') X += Distance;
            }
            //移除已经用过的字符串
            s.erase(0, len + 1);
        }
        cout << X << "," << Y << endl;
    }

    return 0;
}