题解 | 坐标移动
坐标移动
https://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
#include <stdio.h> #include <string.h> #include <ctype.h> // 检查输入字符串是否合法 int OK(char *s) { int len = strlen(s); // 检查长度是否合法(2 或 3) if (len != 2 && len != 3) return 1; // 检查第一个字符是否为 'A', 'D', 'W', 'S' if (s[0] != 'A' && s[0] != 'D' && s[0] != 'W' && s[0] != 'S') return 1; // 检查后续字符是否为数字 for (int i = 1; i < len; i++) { if (!isdigit(s[i])) return 1; } return 0; // 合法则返回 0 } // 处理指令并更新坐标 void process(char *s, int *x, int *y) { int n = 0; int len = strlen(s); // 提取数字部分 if (len == 2) n = s[1] - '0'; else if (len == 3) n = (s[1] - '0') * 10 + (s[2] - '0'); // 根据指令更新坐标 switch (s[0]) { case 'A': *x -= n; break; case 'D': *x += n; break; case 'W': *y += n; break; case 'S': *y -= n; break; } } int main() { char s[10001]; int x = 0, y = 0; // 读取整行输入 fgets(s, sizeof(s), stdin); // 按分号分割字符串 char *token = strtok(s, ";"); while (token) { if (!OK(token)) { // 如果输入合法 process(token, &x, &y); // 更新坐标 } token = strtok(NULL, ";"); // 继续处理下一个分号分隔的部分 } // 输出最终坐标 printf("%d,%d\n", x, y); return 0; }