题解 | #坐标移动#

坐标移动

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

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

void Move(int &x, int &y, string mv) {
    if(mv.size() < 2 || mv.size() > 3) return;  // 指令无效
    // 获取移动距离
    int dis = 0;
    if(isdigit(mv[1]) && (mv.size()==2 || isdigit(mv[2]))) {
        dis = stoi(mv.substr(1, 2));
    }
    switch (mv[0]) {
        case 'A':
            x -= dis;
            break;
        case 'D' :
            x += dis;
            break;
        case 'W' :
            y += dis;
            break;
        case 'S' :
            y -= dis;
            break;
        default:
            break;
    }
}

int main() {
    string str;
    cin >> str;
    int x = 0, y = 0;   // 起始坐标

    // 遍历str,获取每一步移动指令
    int pos = 0;
    for(int i=0; i<str.size(); ++i) {
        if(str[i] == ';') {
            Move(x, y, str.substr(pos, i - pos));
            pos = i+1;
        }
    }
    cout << x << ',' << y;
    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

kl_我是东山啊:《相关公司:阿里巴巴》
投递阿里巴巴等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务