题解 | #坐标移动#
坐标移动
https://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
#include <stdio.h> #include <string.h> #include <stdlib.h> int move_coord(char *MOVE,int count) { if((MOVE[1] < '0' || MOVE[1] > '9') || (MOVE[2] < '0' || MOVE[2] > '9')) return 0; else { if(count == 2)//只记录了个位数 { return (MOVE[1] - '0'); } else if(count == 3)//记录了两位数 { return (MOVE[1] - '0') *10 + (MOVE[2] - '0'); } else { return 0; } } } void moveStep(int *POSXY, char *MOVE, int count) { if(count > 3) { return; } switch(MOVE[0]) { case 'W': POSXY[1] += move_coord(MOVE, count); break; case 'S': POSXY[1] -= move_coord(MOVE, count); break; case 'A': POSXY[0] -= move_coord(MOVE, count); break; case 'D': POSXY[0] += move_coord(MOVE, count); break; default: break; } return; } int main() { char str[10001]; int POSXY[2]={0,0}; char MOVE[3];//方向+十分位+个位 int count = 0;//记录操作符的位数 gets(str); int len = strlen(str); for(int i=0;i<len;i++) { if(str[i] == ';')//找到';'就开启新的MOVE记录 { moveStep(POSXY,MOVE,count); count = 0; continue;//避免';'被写进MOVE[0] } if(count < 3)//超过3位不做记录 { MOVE[count++] = str[i]; } } printf("%d,%d",POSXY[0],POSXY[1]); return 0; }