题解 | #坐标移动#老实人的老实解法
坐标移动
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; }
刷题总结类 文章被收录于专栏
这里记录一些刷题时候的总结思考