牛客:HJ17 坐标移动[华为机考][字符串]

学习要点

  1. string.find()
  2. string.substr()

题目链接

坐标移动_牛客题霸_牛客网

题目描述

解法:字符串操作

cpp 复制代码
// #include <iostream>
#include <bits/stdc++.h>
#include <map>
#include <string>
#include <unordered_map>
#include <utility>
using namespace std;

int main() {
    string big_str;
    getline(cin, big_str);
    multimap<char,int>pos_map;
    // 开始检查
    // 先将头直接的';'排除
    int pos = 0;
    while (big_str[pos] == ';') {
        pos++;
    }
    if ( pos >= big_str.size()) {
        cout << '0' << ',' << '0' << endl;
    } else {
        while (pos < big_str.size()) {
            // 先拿到单个元素
            int prev_pos = pos;
            pos = big_str.find(';', pos);
            string tmp = big_str.substr(prev_pos, pos - prev_pos);
            while (big_str[pos] == ';') {
                pos++;
                if (pos == big_str.size())   break; // 防止溢出
            }
            // 尺寸必须小于4
            if (tmp.size() >= 4)
                continue;
            // 第一个必须是WASD
            if (tmp[0] != 'A' && tmp[0] != 'W' && tmp[0] != 'S' && tmp[0] != 'D')
                continue;
            // 第二个必须是数字
            if (tmp[1] < '0' || tmp[1] > '9')
                continue;
            // 如果有第三个必须是数字
            if (tmp.size() == 3) {
                if (tmp[2] < '0' || tmp[2] > '9')
                    continue;
            }
            // 结果正确放入容器
            // pos_map[tmp[0]] = stoi(tmp.substr(1));
            pos_map.insert(make_pair(tmp[0],stoi(tmp.substr(1))));
        }
        // 开始计算
        int x = 0;
        int y = 0;
        for (auto& i : pos_map) {
            switch (i.first) {
                case 'A':
                    x = x - i.second;
                    break;
                case 'D':
                    x = x + i.second;
                    break;
                case 'W':
                    y = y + i.second;
                    break;
                case 'S':
                    y = y - i.second;
                    break;
                default:
                    break;
            }
        }
        cout << x << ',' << y << endl;
    }
}
// 64 位输出请用 printf("%lld")
相关推荐
小兔崽子去哪了20 分钟前
华为 IODT 设备接入
java·华为
梁山好汉(Ls_man)31 分钟前
鸿蒙_使用DevEco Studio预览器
华为·harmonyos·arkui·预览器
HMS Core2 小时前
化繁为简:顺丰速运App如何通过 HarmonyOS SDK实现专业级空间测量
华为·harmonyos
见山是山-见水是水3 小时前
鸿蒙flutter第三方库适配 - 动态工作流
flutter·华为·harmonyos
HwJack203 小时前
HarmonyOS 编译产物与包结构小知识
华为·harmonyos
见山是山-见水是水4 小时前
鸿蒙flutter第三方库适配 - 动态布局库
flutter·华为·harmonyos
key_3_feng5 小时前
鸿蒙NEXT原生AI智能家庭助手开发方案
人工智能·华为·harmonyos
Digitally5 小时前
如何将短信从华为手机迁移到 iPhone
华为·智能手机·iphone
见山是山-见水是水6 小时前
鸿蒙flutter第三方库适配 - JSON格式化工具应用
flutter·华为·json·harmonyos
梁山好汉(Ls_man)6 小时前
鸿蒙应用如何新建页面
华为·harmonyos·鸿蒙·arkui