题解 | #坐标移动#
坐标移动
http://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
C++题解-坐标移动
1、主要封装了两个函数,一个用来切分总的字符串,另一个用来判断当前的字符串是否合法。
2、如果当前字符串合法,通过一个while循环计算移动的步数,并判断移动的是那个坐标,最终在初始坐标上进行移动
#include <bits/stdc++.h>
using namespace std;
vector<string> slep(string& str){
int left = 0,right = 0,len =str.size();
vector<string> vec;
while(right < len){
if(str[right] == ';'){
vec.push_back(str.substr(left,right-left));
right++;
left = right;
}else
right++;
}
return vec;
}
bool getstr(string& str){
int len = str.size();
if(len == 0) return false;
char tail = str[0];
if(tail == 'A' || tail == 'S' || tail == 'W' || tail == 'D'){
for(int i=1;i<len;i++){
if(str[i] - '0' >= 0 && str[i] - '0' <10)
;
else
return false;
}
return true;
}
return false;
}
int main(){
string str;
cin>>str;
vector<string> vec = slep(str);
int len = vec.size();
int x=0,y=0;
for(int i=0;i<len;i++){
if(getstr(vec[i])){
int a=0,l = vec[i].size(),p=1;
for(int j=l-1;j>0;j--){
a += (vec[i][j] - '0')*p;
p *= 10;
}
if(vec[i][0] == 'A')
x -= a;
if(vec[i][0] == 'S')
y -= a;
if(vec[i][0] == 'W')
y += a;
if(vec[i][0] == 'D')
x += a;
}
}
cout<<x<<","<<y<<endl;
return 0;
}