<pre name="code" class="cpp">/*
开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。
从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。
输入:
合法坐标为A(或者D或者W或者S) + 数字(两位以内)
坐标之间以;分隔。
非法坐标点需要进行丢弃。如AA10; A1A; $%$; YAD; 等。
下面是一个简单的例子 如:
A10;S20;W10;D30;X;A1A;B10A11;;A10;
*/
void movepoint(char* s,int* x,int* y);
void main(){
char str[MAX]="0";
int x=0,y=0;
while(1){
scanf("%s",str);
movepoint(str,&x,&y);
cout<<x<<","<<y<<endl;
}
}
//输入字符串,输出最终移动的坐标
void movepoint(char* s,int* x,int* y){
char* p;
char ss[MAX][MAX]={""};
//1、以分号分割字符串,分割的子串存储到二维数组ss中。
p=strtok(s,";");
int i=0;
while(p!='\0'){
sprintf(ss[i],"%s",p);
p=strtok(NULL,";");
i++;
}
int k=0,k1=0,k2=0;
for(int j=0;j<i;j++){
k1=(ss[j][1]-48);//0的ascii码为48
k2=(ss[j][2]-48);
//2、判别子串是否有效分两步:第一步 长度是否为3,第1个和第2个字符是否是数字(从0开始算)
if( (strlen(ss[j])==2 && 0<=k1&&k1<=9)|| (strlen(ss[j])==3 && 0<=k1&&k1<=9 && 0<=k2&&k2<=9) ){
//3、将数字子串转为数字int性
k=atoi(ss[j]+1);
//4、第二步:判别子串的第一个字符是否为ADSW;
switch(ss[j][0]){
case 'A':{//左移动
*x-=k;break;
}
case 'D':{//右移动
*x+=k;break;
}
case 'W':{//上移动
*y+=k;break;
}
case 'S':{//下移动
*y-=k;break;
}
default:{
break;//舍去
}
}
}
}
}
移动坐标
最新推荐文章于 2022-04-28 10:18:16 发布