题解 | #坐标移动# 有点啰嗦,但是也运行成功了

坐标移动

https://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29

#include <iostream>
#include <sstream>
#include <vector>
#include <string>
using namespace std;

struct Point {
    int x, y;
};

// bool isValidCoord(char dir, int num) {
//     // 检查方向是否合法
//     if (dir != 'A' && dir != 'W' && dir != 'S' && dir != 'D')
//         return false;

//     // 检查数字是否合法
//     if (num <= 0 || num > 99)
//         return false;

//     return true;
// }

//检查坐标是否有效
bool isValidCoord(const string& coord) {
    //判断字符长度有效
    if (coord.size() < 2 || coord.size() > 3)
        return false;

    char dir = coord[0];
    int len = coord.size();

    // 检查第一个字符是否合法方向
    if (dir != 'A' && dir != 'W' && dir != 'S' && dir != 'D')
        return false;

    //判断字符串后边是不是数字
    for (int i = 1; i < len; i++) {
        if (!isdigit(coord[i]))
            return false;
    }

    return true;
}

//处理坐标字符串, 返回最终坐标
Point processCoordinates(const string& input) {
    stringstream ss(input);
    string line;
    Point point = {0, 0};
    while (getline(ss, line, ';')) {
        stringstream lineStream(line);
        char dir;
        int num;
        if(isValidCoord(line)){
            while (lineStream >> dir >>num) {
                string coordinate = string(1, dir) + to_string(num);
                if (isValidCoord(coordinate)) {
                    switch (dir) {
                        case 'A':
                            point.x -= num;
                            break;
                        case 'D':
                            point.x += num;
                            break;
                        case 'W':
                            point.y += num;
                            break;
                        case 'S':
                            point.y -= num;
                            break;
                    }
                } else {
                    cout << "Coordinate is invalid." << endl;
                }
            }
        }
    }
    return point;
}

int main() {
    string input;
    getline(cin, input);

    Point result = processCoordinates(input);

    cout << result.x << ',' << result.y << endl;

    return 0;
}


全部评论

相关推荐

完美的潜伏者许愿简历通过:我上表jd,请求封我做后端大将军的事,北京有消息了:竟然不许!!! 他们一定是看我没有实习,这才故意驳回我的请求!
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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