循环遍历分割字符串 正则表达式

#include <iostream>
#include <string>
#include <regex>

using namespace std;


int main() {
    std::string str;
    getline(cin, str);

    regex pat("^([ASWD]{1})(\\d*)$");
    int coordinate_x = 0;
    int coordinate_y = 0;

    int i = 0;
    while(i < str.size())
    {
        int cmd_len = 0;
        int j = i;
        while(j < str.size() && str[j] != ';')
        {
            cmd_len++;
            j++;
        }
        string cmd_str = str.substr(i, cmd_len);
        smatch match;
        if(regex_search(cmd_str, match, pat))
        {
            string direction_str = match[1];
            int distance = stoi(match[2]);
            switch(direction_str[0])
            {
                case 'W':
                    coordinate_y += distance;
                    break;
                case 'S':
                    coordinate_y -= distance;
                    break;
                case 'A':
                    coordinate_x -= distance;
                    break;
                case 'D':
                    coordinate_x += distance;
                    break;
            }
        }
        else //invalid command
        {
            
        }
        i = j+1;
    }
    cout << coordinate_x << "," << coordinate_y << endl;
    return 0;
}