题解 | #坐标移动#

坐标移动

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

全部评论

相关推荐

小红书 后端开发 总包n+8w+期权
点赞 评论 收藏
分享
牛客569470950号:也不知道是哪个群体45年前鬼哭狼嚎的为自己争取的被剥削的权利
点赞 评论 收藏
分享
10-25 12:05
已编辑
湖南科技大学 Java
若梦难了:我有你这简历,已经大厂乱杀了
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务