题解 | #坐标移动#

坐标移动

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

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 12:20
点赞 评论 收藏
分享
05-22 09:23
门头沟学院 Java
点赞 评论 收藏
分享
头顶尖尖的程序员:我也是面了三四次才放平心态的。准备好自我介绍,不一定要背熟,可以记事本写下来读。全程控制语速,所有问题都先思考几秒,不要急着答,不要打断面试官说话。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务