题解 | #坐标移动#
坐标移动
http://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
坐标移动:C语言解法
此方法可以运用到实际的项目中,用来判断键盘上WASD按得时长,从而得到行走的距离来获取当前点的坐标。
#include<stdio.h>
//用来判断WASD后面接的是否是合法的数字,否则返回0,不影响结果
int judgeNum(char *str){
int len = strlen(str), num = 0;
for(int i=0; i<len; i++){
if(str[i] >= '0' && str[i] <= '9'){
num *= 10;
num += (str[i] - '0');
}else{
//当有任何字符不合法时都会返回0
return 0;
}
}
return num;
}
int main(){
int x=0, y=0, size=0;
//在堆区申请大小为10000字节的空间
char *str = (char *)malloc(10000);
char step[10] = {0};
scanf("%s\n",str);
//判断字符串是否到了结尾
while(*str != NULL){
size = 0;
//可以把每个分号看成一个步骤,获取每个步骤的长度
while(*str++ != ';') {
size++;
}
memset(step, 0, sizeof(step));
//把每个步骤拷贝到字符数组里,方便判断,当然也可以不拷贝直接把指针和步长传给judegeNum
memcpy(step, str-size-1, size);
switch(step[0]){
//如果第一个字符为上下左右,就根据judgeNum返回的数值进行加减
case 'A': x-=judgeNum(&step[1]); break;
case 'D': x+=judgeNum(&step[1]); break;
case 'W': y+=judgeNum(&step[1]); break;
case 'S': y-=judgeNum(&step[1]); break;
//如果是其他,就跳过
default: break;
}
}
printf("%d,%d\n",x,y);
}