C++ 可以说思路很清晰,只用string类做,测试没有发现漏洞,看看大家有没有发现漏洞

#include<iostream>
#include<string.h>
//利用string
using namespace std;
int main()
{
    string taget;
    int mo=0,i=0,bef=0,cur=0;//用于判断分号位置
    int coord[2]={0,0};//初始坐标x,y
    int num=0;//坐标大小
    getline(cin,taget);
    mo=taget.size();
    for(i=0;i<mo;i++)//
    {          
       if(taget[i]==';'&& i>=2)
        {
           cur=i;                 //当前分号的位置
           if(cur-bef==4||i==3)//坐标有两个数字的情况:与上个分号相隔4或第一个分号是在3的位置才有效 判断格式是否有效
           {
               if((taget[i-2]>='0'&&taget[i-2]<='9')&&(taget[i-1]>='0'&&taget[i-1]<='9'))//判断坐标是否有效
               { 
                    num=(taget[i-2]-'0')*10+(taget[i-1]-'0');//坐标大小
                    switch(taget[i-3])
                    {
                        case 'W':coord[1]+=num;break;
                        case 'S':coord[1]-=num;break;
                        case 'D':coord[0]+=num;break;
                        case 'A':coord[0]-=num;break;
                        default:break;
                    }
               }
           }
           else if(cur-bef==3 || i==2)//坐标有一位数字的情况:与上个分号相隔3或第一个分号是在2的位置才有效 判断格式是否有效
           {
               if(taget[i-1]>='0'&&taget[i-1]<='9')//判断坐标是否有效
               { 
                    num=(taget[i-1]-'0');//坐标大小
                    switch(taget[i-2])
                    {
                        case 'W':coord[1]+=num;break;
                        case 'S':coord[1]-=num;break;
                        case 'D':coord[0]+=num;break;
                        case 'A':coord[0]-=num;break;
                        default:break;
                    }
               }
           }
           bef=cur;//更新分号上个位置         
       }     
    }
    cout<<coord[0]<<','<<coord[1]<<endl;
    return 0;
}