题解 | 坐标移动

坐标移动

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;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务