用栈的思想解,把每两个分号之间的子串压入栈中,然后判断和执行坐标移动操作
#include<stdio.h>
#include<string.h>

int main(void)
{
    char str[10000]={0};
    scanf("%[^\n]",&str);
    int x=0;
    int y=0;
    char order_stack[100]={0};
    int o_size=0;
    //判断每步操作是否有效
    int len=strlen(str);
    int flag=0;
    int temp=0;
    for(int i=0;i<len;i++)
    {
        if((str[i]>='0'&&str[i]<='9')||(str[i]>='A'&&str[i]<='Z'))
        {
            order_stack[o_size++]=str[i];
        }
        if(str[i]==';')
        {
            if(order_stack[0]=='W'||order_stack[0]=='A'||order_stack[0]=='S'||order_stack[0]=='D')
            {
                for(int j=1;j<o_size;j++)
                {
                    if(!(order_stack[j] >= '0' && order_stack[j] <= '9'))
                    {
                        flag++;
                    }
                }
                if(flag==0)
                {
                    for(int k=1;k<o_size;k++)
                    {
                        temp=temp*10+(order_stack[k]-'0');
                    }
                    if (order_stack[0] == 'W') { y += temp; }
                    else if (order_stack[0] == 'S') { y -= temp; }
                    else if (order_stack[0] == 'A') { x -= temp; }
                    else if (order_stack[0] == 'D') { x += temp; }
                }
            }
            flag=0;
            temp=0;
            o_size=0;order_stack[0]='0';
        }
        
    }
    //for(int i=0;i<o_size;i++){printf("%c ",order_stack[i]);}
    //printf("%d",temp);
    printf("%d,%d",x,y);
    return 0;
}