题解 | HJ17 #坐标移动#
坐标移动
http://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
思路来源于题解
重点是用一个string的vector来存储子串然后依次处理,还要主题题目中说了数字不超过两位,所以可以直接判断子串的位数来看是否合法。
#include
#include
using namespace std;
void coordinate_movement(string s)
{
vector vec;//存储每一个子字符串
int n = s.size();
int sublen = 0;
int x = 0, y = 0;
for (int i = 0; i < n; i ++ )
{
if (s[i] != ';')
{
sublen ++ ;
continue;
}
vec.push_back(s.substr(i - sublen, sublen));
sublen = 0;
}
for (int i = 0; i < vec.size(); i ++ )
{
int num;
//处理每一个子串
if (vec[i].size() == 3 && vec[i][1] >= '0' && vec[i][1] <= '9'
&& vec[i][2] >= '0' && vec[i][2] <= '9')
{
num = (vec[i][1] - '0') * 10 + (vec[i][2] - '0');
}
if (vec[i].size() == 2 && vec[i][1] >= '0' && vec[i][1] <= '9')
{
num = vec[i][1] - '0';
}
if (vec[i].size() == 1)
{
num = 0;
}
if (vec[i][0] == 'A') x -= num;
if (vec[i][0] == 'S') y -= num;
if (vec[i][0] == 'D') x += num;
if (vec[i][0] == 'W') y += num;
}
cout << x << ',' << y ;
}
int main()
{
string s;
cin >> s;
coordinate_movement(s);
return 0;
}