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; }