算法是递归
递归关键是退出的条件设置,这里是字符串长度变为0。
为啥采用递归呢?
一定是存在重复操作步骤,这里以“;”作分割标志,每个隔出的部分都是相同的约束。
避坑点:
在碰到非法格式的字符串,是还有继续向后比对的,所以不是直接return,而是进入递归再return。
#include <iostream>
using namespace std;
void count(string str, int& x, int& y){
int size = str.size();
if(size == 0) return;
int pos = str.find(";");
if(pos > 3) {
str = str.erase(0, pos+1);
count(str, x, y);
return;
}
if(str[0] != 'A' && str[0] != 'S' && str[0] != 'D' && str[0] != 'W'){
str = str.erase(0, pos+1);
count(str, x, y);
return;
}
for(int i = 1; i < pos; i++){
if(str[i] < 48 || str[i] > 57){
str = str.erase(0, pos+1);
count(str, x, y);
return;
}
}
string tmp_s = str.substr(1, pos - 1);
int num = stoi(tmp_s);
if(str[0] == 'A') x-= num;
if(str[0] == 'D') x+= num;
if(str[0] == 'S') y-= num;
if(str[0] == 'W') y+= num;
str = str.erase(0, pos+1);
count(str, x, y);
}
int main(){
string str;
int x = 0,y = 0;
while(cin >> str){
count(str, x, y);
cout << x << "," << y << endl;
}
return 0;
}