思路:

设置loc_right表示第一位是不是asdw, 设置num_isright表示后面的是不是数字;

先看第一位,如果第一位是asdw就看下一位,设置number当做位移量=0,如果是数字,number=number*10+(data[i]-48)并且把num_isright设置为1(不同的ide可能要不要减去不一定,比如我在vs上面跑就不用减),如果遇到不是数字的,就把num_isright设置为0并让i指向下一个分号,如果loc_isright和num_isright都是1,那么xy增加对应偏移量就行了

#include<stdio.h>

int main(){

char data[10001]={0};
scanf("%[^\n]", data);
int x=0,y=0;
int i;
for (i=0; data[i]!='\0'; i++){
    int loc_isright = 0;
    int num_isright = 0;
    int number = 0;
    char sign=data[i];
    if(sign=='A' || sign=='S' || sign=='D' || sign =='W')
    {
        loc_isright =1;
        i++;
        for(;data[i]!=';'; i++)
        {
            if(data[i]>=48 && data[i]<=57){
                num_isright = 1;
                number = number*10+(data[i]-48);
            }
            else{
                num_isright = 0;
                break;
            }
        }
        if(loc_isright && num_isright){
            if(sign == 'A'){
                x=x-number;
            }
            else if(sign == 'D'){
                x=x+number;
            }
            else if(sign == 'W'){
                y = y + number;
            }
            else{
                y = y - number;
            }
        }
        else{
            while(data[i]!=';')i++;
        }
    }
    else{
        while(data[i]!=';')i++;
    }
}
printf("%d,%d", x, y);
return 0;

}