题解 | #坐标移动#
坐标移动
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坐标。就是指针还是用不利索,不然应该可以写得更清爽一点。