题解 | #坐标移动#
坐标移动
http://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
本题主要考察字符串的处理,而c++没有Java中的split函数,所以造成一定的困扰。 这里我分享给大家一个高可用性的split函数。
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
static void split(const string& s, vector<string>& tokens, const string& delimiters = " ")
{
string::size_type lastPos = s.find_first_not_of(delimiters, 0);
string::size_type pos = s.find_first_of(delimiters, lastPos);
while (string::npos != pos || string::npos != lastPos) {
tokens.push_back(s.substr(lastPos, pos - lastPos));
lastPos = s.find_first_not_of(delimiters, pos);
pos = s.find_first_of(delimiters, lastPos);
}
}
int main() {
string s;
cin >> s;
vector<string> tokens;
int x = 0, y = 0;
split(s, tokens, ";");
for (auto &str : tokens) {
if ((str.size() == 2 && isdigit(str[1])) || (str.size() == 3 && isdigit(str[1]) && isdigit(str[2]))) {
switch (str[0]) {
case 'W':
y += stoi(str.substr(1));
break;
case 'A':
x -= stoi(str.substr(1));
break;
case 'S':
y -= stoi(str.substr(1));
break;
case 'D':
x += stoi(str.substr(1));
break;
default:
break;
}
}
}
cout << x << "," << y << endl;
return 0;
}
题解 文章被收录于专栏
本专栏收录的题解不求类似“一行代码”之类的奇技淫巧,只求开阔思路的适合大众提升编程思维的朴实无华的算法。