题解 | #坐标移动#
坐标移动
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;
}
