学习要点
- string.find()
- 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")