题解 | #坐标移动#老实人的老实解法
坐标移动
http://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
由于坐标一定是;分割,所以每次都把第一个分号前面的字符串得到,然后判断是否合法,进而对坐标进行加加减减,就可以得到最终的目标;
而且首先判断是否合法也有一个好处,就是可以避免非法情况进入正常的处理流程;
string a;
a.find(';'); 返回第一个`;`的位置
a.substr(0, len);
a.erase(0, len + 1); //需要包括分号 #include<bits/stdc++.h>
using namespace std;
unordered_set<char> st{'W', 'S', 'A', 'D'};
bool isValid(string& s) {
if (s.size() > 3 || s.size() < 2) return false;
if (!st.count(s[0])) return false;
for (int i = 1; i < s.size(); ++i) {
if (s[i] < '0' || s[i] > '9') //不是字符
return false;
}
return true;
}
int getDistance(string& s) {
int d = 0;
for (int i = 1; i < s.size(); ++i)
d = d * 10 + (s[i] - '0');
return d;
}
int main() {
/*
直接在字符串中找';',分号前的字符串就是可能为合法坐标的组合,也就是,需要编写函数,
用于判断坐标是否合法
*/
string s;
while (cin >> s) {
int len = s.length();
int X = 0, Y = 0, Distance = 0;
while (s.size() > 0) {
int len = s.find(';');
string cur = s.substr(0, len);
//判断坐标组合是否合法
if (isValid(cur)) {
Distance = getDistance(cur);
if (cur[0] == 'W') Y += Distance;
if (cur[0] == 'S') Y -= Distance;
if (cur[0] == 'A') X -= Distance;
if (cur[0] == 'D') X += Distance;
}
//移除已经用过的字符串
s.erase(0, len + 1);
}
cout << X << "," << Y << endl;
}
return 0;
} 刷题总结类 文章被收录于专栏
这里记录一些刷题时候的总结思考
查看14道真题和解析