1、思路很清晰,找到匹配的字符ADSW然后再找出后面符合要求的字符数字即可;

#include <iostream>
#include <string>

using namespace std;

int LenRecord(int& i, string str)
{
    int posi = str.find(';', i);  // 以分号分隔找到其位置;
    if (posi == str.npos) {
        return 0xff;  // 异常
    }
    string tmpstr = str.substr(i + 1, posi);  // 分号与匹配的字符之间的长度,两种情况一位数与两位数长度
    int level = 0;
    if (posi - i == 3) {  // 3表示移动两位数距离
        if ((tmpstr[0] >= '0' && tmpstr[0] <= '9') &&
            (tmpstr[1] >= '0' && tmpstr[1] <= '9')) {
            level = atoi(tmpstr.c_str());
        }
    } else if (posi - i == 2) {  // 2表示移动一位数距离
        if (tmpstr[0] >= '0' && tmpstr[0] <= '9') {
            level = atoi(tmpstr.c_str());
        }
    } else {  // 不符合无效处理
    }
    i = posi + 1;
    return level;
}

int main()
{
    int x = 0;
    int y = 0;
    string str;
    getline(cin, str);
    int ret = 0;
    for (int i = 0; i < str.length();) {
        switch (str[i]) {
            case 'A' :
                ret = LenRecord(i, str);
                if (ret == 0xff) {
                    cout << x << "," << y << endl;
                    return 0;
                }
                x -= ret;
                break;
            case 'D' :
                ret = LenRecord(i, str);
                if (ret == 0xff) {
                    cout << x << "," << y << endl;
                    return 0;
                }
                x += ret;
                break;
            case 'S' :
                ret = LenRecord(i, str);
                if (ret == 0xff) {
                    cout << x << "," << y << endl;
                    return 0;
                }
                y -= ret;
                break;
            case 'W' :
                ret = LenRecord(i, str);
                if (ret == 0xff) {
                    cout << x << "," << y << endl;
                    return 0;
                }
                y += ret;
                break;
            default :
                ret = LenRecord(i, str);
                if (ret == 0xff) {
                    cout << x << "," << y << endl;
                    return 0;
                }
                break;
        }
    }
    cout << x << "," << y << endl;
    return 0;
}