题解 | #坐标移动#
坐标移动
https://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
string yidong;
int X = 0, Y = 0;
vector<string> data;
string num = "";
while (cin >> yidong)
{
for (int i = 0; i < yidong.size(); i++)
{
if (yidong[i] != ';')
{
num += yidong[i];
}
else if (yidong[i] == ';')
{
data.push_back(num);
num = "";
continue;
}
}
for (auto it : data)
{
// 首先判断是否为合法数据
if ((it[0] != 'A' && it[0] != 'D' && it[0] != 'W' && it[0] != 'S')
|| !isdigit(it[1]))
{
continue;
}
else if (it.size() == 3 && isdigit(it[2])) {
// 将字符串的第二、第三个字符转成整形数字
int num1 = int(it[1] - '0');
int num2 = int(it[2] - '0');
// 判断转换是否成功,如果字符串中包含除数字、大小写字母、分号之外的字符,那么转换会失败
if (num1 < 0 || num1 > 9 || num2 < 0 || num2 > 9)
{
continue;
}
// 根据第一个字符进行操作
if (it[0] == 'A')
{
X -= (num1 * 10 + num2);
}
else if (it[0] == 'D')
{
X += (num1 * 10 + num2);
}
else if (it[0] == 'W')
{
Y += (num1 * 10 + num2);
}
else if (it[0] == 'S')
{
Y -= (num1 * 10 + num2);
}
}
else if (it.size() == 2) {
// 将字符串的第二、第三个字符转成整形数字
int num1 = int(it[1] - '0');
// 判断转换是否成功,如果字符串中包含除数字、大小写字母、分号之外的字符,那么转换会失败
if (num1 < 0 || num1 > 9)
{
continue;
}
// 根据第一个字符进行操作
if (it[0] == 'A')
{
X -= (num1);
}
else if (it[0] == 'D')
{
X += (num1);
}
else if (it[0] == 'W')
{
Y += (num1);
}
else if (it[0] == 'S')
{
Y -= (num1);
}
}
}
}
cout << X << "," << Y << endl;
system("pause");
return 0;
}
// 64 位输出请用 printf("%lld")