牛客:HJ17 坐标移动[华为机考][字符串]
学习要点
- string.find()
- string.substr()
题目链接
坐标移动_牛客题霸_牛客网
题目描述
解法:字符串操作
// #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; // 防止溢出}// 尺寸必须小于4if (tmp.size() >= 4)continue;// 第一个必须是WASDif (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")