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;
}
京公网安备 11010502036488号