题解 | #坐标移动#
坐标移动
https://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
//遍历数组的暴力解法
int mypow(int a, int b) //自定义的乘积函数,pow函数不知道为什么不管用...
{
int r = 1;
for(int i=0;i<b;i++)
{
r *= a;
}
return r;
}
int L(char* arr) //用于判断并计算
{
int len = 0;
int flag = 0;
int r = 0;
len = strlen(arr);
for(int i=1;i<len;i++)
{
if( (arr[i] >= '0')&&(arr[i] <= '9') )
flag = 0;
else
flag = 1;
}
if(!flag)
{
for(int j=0;j<len-1;j++)
{
r += (arr[len-1-j]-48)*mypow(10,j); //减去48目的是字符转ASCII码
}
return r;
}
return 0;
}
int main(void)
{
char rev[10001]; //定义接收字符串数组
char buf[11]; //定义接收每两个分号之间的东西
int x = 0;//定义x和y的坐标
int y = 0;
int length = 0; //定义接收字符串的有效字符长度
int i = 0; //遍历接收数组的标号
int j = 0; //控制buf数组的标号
fgets(rev,sizeof(rev),stdin);
length = strlen(rev)-1;
rev[length] = '\0';
while(rev[i] != '\0') //从前往后遍历接收数组
{
if(rev[i] != ';') //不是分号则将其赋予buf数组
{
buf[j] = rev[i];
j++;
}
else
{
switch(buf[0]) //由于后面会清buf数组,且将buf的接收指针重置为,则每次只需判断buf的第一个字符
{
case 'A': //根据逻辑进行控制x和y的变化
x -= L(buf);
break;
case 'S':
y -= L(buf);
break;
case 'D':
x += L(buf);
break;
case 'W':
y += L(buf);
break;
default:
break;
}
memset(buf,0,sizeof(buf));
j=0;
}
i++;
}
printf("%d,%d",x,y);
return 0;
}
