题解 | #坐标移动#
坐标移动
https://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
#include<stdio.h>
char* streffect(char *str_in);
int* strcoordinate(char* str_effect);
int main()
{
//输入指令
char str_in[10000] = { 0 };
//printf("please input coordinate instruction:");
gets(str_in);
//printf("please insure your instruction:%s\n", str_in);
//取出有效指令
char* str_effect=streffect(str_in);
//printf("str_effect:%s\n", str_effect);
//输出坐标
int* str_cooridinate=strcoordinate(str_effect);
printf("%d,%d\n", str_cooridinate[0], str_cooridinate[1]);
}
#include<stdio.h>
char* streffect(char* str_in);
char* streffect(char* str_in)
{
char str[10000] = { ';',0 };
//创造指令有效性判断条件的数组
for (size_t io = 0; str_in[io] != 0; io++)
{
str[io + 1] = str_in[io];
}
//printf("STR:%s\n", str);
//指令解析,外层str循环取;间指令,内层str_effect循环——记录有效指令
char str_effect[10000] = { 0 };
size_t e = 0;
size_t i = 0, j, k;
if (str[i] == ';')
{
for (j = i + 1; str[j] != 0; j++)
{
if (str[j] == ';')
{
switch (j - i)
{
case 3:
if (str[i + 1] == 'A' || str[i + 1] == 'W' || str[i + 1] == 'S' || str[i + 1] == 'D')
{
if (str[i + 2] >= 48 && str[i + 2] <= 57)
{
str_effect[e] = str[i + 1];
str_effect[e + 1] = 'O';//'O'=79
str_effect[e + 2] = str[i + 2];
e += 3;//下一组指令
}
}
break;
case 4:// ;A10;
if (str[i + 1] == 'A' || str[i + 1] == 'W' || str[i + 1] == 'S' || str[i + 1] == 'D')
{
if (str[i + 2] >= 48 && str[i + 2] <= 57)
{
if (str[i + 3] >= 48 && str[i + 3] <= 57)
{
for (k = 0; k < 3; k++)//取有效指令给str_efect
{
str_effect[e + k] = str[i + k + 1];
}
e += 3;//下一组指令
}
}
}
break;
default:
break;
}
i = j;//重置分号位置下标
}
}
}
return str_effect;
}
#include<stdio.h>
int* strcoordinate(char* str_effect)
{
int str_coordinate[2] = { 0,0 };
for (size_t i = 0; str_effect[3*i+2] != 0; i++)
{
char a = str_effect[3 * i];
int b = str_effect[3 * i + 1] - 48;
int c = str_effect[3 * i + 2] - 48;
if (b == 'O' - 48)
{
b = '0'-48;
}
switch (a)
{
case 'A':
str_coordinate[0] = str_coordinate[0] - (b * 10 + c);
break;
case 'D':
str_coordinate[0] = str_coordinate[0] + (b * 10 + c);
break;
case 'S':
str_coordinate[1] = str_coordinate[1] - (b * 10 + c);
break;
case 'W':
str_coordinate[1] = str_coordinate[1] +(b * 10 + c);
break;
default:
break;
}
}
return str_coordinate;
}
传音控股公司福利 337人发布
