题解 | #坐标移动#
坐标移动
https://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
#include<stdio.h>
#include<string.h>
/*定义一个函数,返回对应数组的指针*/
/*这个函数用于计算每个坐标字符串带来的x,y变化*/
int *coordinate_movement(char *str,int end,int len){
char coor[999]={"\0"};
/*定义一个静态变量,在程序的整个生命周期中都存在*/
static int xy[2]={0,0};
/*初始化为0,以便每次访问时都从零开始*/
xy[0]=0;
xy[1]=0;
int i=0;
int a=0;
int xl=0,yl=0;
/* printf("%d",len);
printf("%d",end);
printf("%c",str[0]); */
for ( i = 0; i < len; i++) /*长度为len,从0开始,故是i<len*/
{
a=end-len+i;
coor[i]=str[a];
}
//printf("%s\n",coor);
/*判断方向*/
switch (coor[0]) {
case 'A':xl=-1;
break;
case 'D':xl=1;
break;
case 'W':yl=1;
break;
case 'S':yl=-1;
break;
}
for (i=1; i<len; i++) {
if (coor[i]<'0' || (int)coor[i]>'9' ) {
xy[0]=0;
xy[1]=0;
//printf("x变化的值--%d\n",xy[0]);
return xy;
}
xy[0] =(coor[i]-'0')*xl+10*xy[0];
xy[1] =(coor[i]-'0')*yl+10*xy[1];
}
/* printf("c%s",coor);
printf("xl%d",xl); */
//printf("x变化的值--%d\n",xy[0]);
return xy;
}
int main(){
/*变量定义up*/
int x=0,y=0;
/*一个指向整数的指针*/
int *xyp;
char str[1000]={"\0"};
char *p_str=str;
char coor[1000]={"\0"};
char *p_coor=coor;
int len_s=0;
int len_c=0;
int i=0;
/*变量定义区down*/
/*读取数据*/
scanf("%s",str);
len_s=strlen(str);
//printf("%s\n",str);
for (i=0; i<=len_s; i++) {
/*记录坐标的长度,记得处理完一个坐标后要归零*/
len_c++;
if (str[i]==';') {
xyp=coordinate_movement(str,i,len_c-1);
x+=*xyp;
y+=*(xyp+1);
len_c=0;
}
}
printf("%d,%d",x,y);
return 0;
}
我的思路是先把坐标文本字符串分解成一个一个的坐标字符块,然后再用函数对这个字符块处理得到每次的坐标增量,用一个长度为2的数组来存放x,y坐标。就是指针还是用不利索,不然应该可以写得更清爽一点。
