题解 | #坐标移动#
坐标移动
https://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
#include <iostream>
#include <bits/stdc++.h>
#include <string>
#include <vector>
using namespace std;
const string valid = "ADWS";
int main() {
auto check = [](const string& str) -> int {
if (str.empty()) {
return -1;
} else {
if (valid.find(str[0]) == string::npos) {
return -1;
} else {
int tmp = 0;
for (int i = 1; i < str.size(); ++i) {
if (str[i] >= '0' && str[i] <= '9') {
tmp = tmp * 10 + (str[i] - '0');
} else {
return -1;
}
}
return tmp;
}
}
};
// 利用std::istringstream做字符串分割处理
string str;
cin >> str;
std::istringstream iss(str);
string token;
vector<int> pos{0,0};
while(std::getline(iss, token, ';')) {
int ck = check(token);
// cout << " check = " << ck << endl;
if (ck != -1) {
switch (token[0]) {
case 'A': pos[0] -= ck; break;
case 'S': pos[1] -= ck; break;
case 'W': pos[1] += ck; break;
case 'D': pos[0] += ck; break;
}
}
// cout << "cur = " << pos[0] << "," << pos[1] << endl;
}
cout << pos[0] << "," << pos[1] << endl;
}
// 64 位输出请用 printf("%lld")
