1、思路很清晰,找到匹配的字符ADSW然后再找出后面符合要求的字符数字即可;
#include <iostream>
#include <string>
using namespace std;
int LenRecord(int& i, string str)
{
int posi = str.find(';', i); // 以分号分隔找到其位置;
if (posi == str.npos) {
return 0xff; // 异常
}
string tmpstr = str.substr(i + 1, posi); // 分号与匹配的字符之间的长度,两种情况一位数与两位数长度
int level = 0;
if (posi - i == 3) { // 3表示移动两位数距离
if ((tmpstr[0] >= '0' && tmpstr[0] <= '9') &&
(tmpstr[1] >= '0' && tmpstr[1] <= '9')) {
level = atoi(tmpstr.c_str());
}
} else if (posi - i == 2) { // 2表示移动一位数距离
if (tmpstr[0] >= '0' && tmpstr[0] <= '9') {
level = atoi(tmpstr.c_str());
}
} else { // 不符合无效处理
}
i = posi + 1;
return level;
}
int main()
{
int x = 0;
int y = 0;
string str;
getline(cin, str);
int ret = 0;
for (int i = 0; i < str.length();) {
switch (str[i]) {
case 'A' :
ret = LenRecord(i, str);
if (ret == 0xff) {
cout << x << "," << y << endl;
return 0;
}
x -= ret;
break;
case 'D' :
ret = LenRecord(i, str);
if (ret == 0xff) {
cout << x << "," << y << endl;
return 0;
}
x += ret;
break;
case 'S' :
ret = LenRecord(i, str);
if (ret == 0xff) {
cout << x << "," << y << endl;
return 0;
}
y -= ret;
break;
case 'W' :
ret = LenRecord(i, str);
if (ret == 0xff) {
cout << x << "," << y << endl;
return 0;
}
y += ret;
break;
default :
ret = LenRecord(i, str);
if (ret == 0xff) {
cout << x << "," << y << endl;
return 0;
}
break;
}
}
cout << x << "," << y << endl;
return 0;
}