题解 | #坐标移动#

坐标移动

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

#include<iostream>
#include<string>
#include<cmath>
using namespace std;

int main() {
    string s;
    cin >> s;                               //用s接收输入的字符串
    int n = s.size();
    string move;                            //move存储坐标
    int x = 0, y = 0;                       //x和y分别为两个坐标值
    char direction = 'W';                   //坐标中的方向
    while (1) {
        int e = 0;                          //判断坐标中字母后是否全为数字
        int p = 0;                          //用于标记分号的位置
        for (int i = 0; i < n; i++) {
            if (s[i] == ';') {
                p = i;
                break;
            }
        }
        move = s.substr(0,p);              //根据分号的位置将坐标字符串分割出来
        for (int k = 1; k < move.size(); k++) {
            if ((move[k] < '0') || (move[k] > '9')) {
                e++;
            }
        }
        if (e != 0) {      //判断坐标字符串中第二个字符开始是否全为数字,否则不合法
            s = s.substr(p + 1, n - 1 - p);
            n = s.size();
            continue;
        }
        int num = 0;        //根据move计算具体的两个坐标值
        for (int j = 1; j < move.size(); j++) {
            num = num + (move[j] - 48) * pow(10, move.size() - j - 1);
        }
        direction = move[0];
        if (direction == 'A') {
            x = x - num;
        } else if (direction == 'D') {
            x = x + num;
        } else if (direction == 'W') {
            y = y + num;
        } else if (direction == 'S') {
            y = y - num;
        }
        if (p == n - 1) {
            break;
        }
        s = s.substr(p + 1, n - 1 - p);//更新整个字符串,将处理过的部分去掉
        n = s.size();
    }
    cout << x << "," << y << endl;
    return 0;
}

#初学者代码#
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-21 13:41
点赞 评论 收藏
分享
06-01 21:50
已编辑
天津理工大学 Java
点赞 评论 收藏
分享
07-08 21:30
已编辑
南昌大学 嵌入式软件开发
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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