前言
华为机试刷题
题目: HJ17 坐标移动
编程语言: C++
解题状态: 基础不牢,磕磕绊绊的
思路
本题主要是模拟题,分为三个步骤:获取字符串后利用分号获取坐标移动步骤;判断步骤是否合法;移动坐标。
代码
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
bool isValid(string& s) {
if (s.size() < 2 || s.size() > 3) return false;
if (s[0] != 'A' && s[0] != 'W' && s[0] != 'S' && s[0] != 'D') return false;
for (int i = 1; i < s.size(); i++) {
if (s[i] < '0' || s[i] > '9') return false;
}
return true;
}
void move(string const& cmd, int& x, int& y) {
int num = 0;
if (cmd.size() == 3) {
num = (cmd[1] - '0') * 10 + (cmd[2] - '0');
} else {
num = cmd[1] - '0';
}
switch (cmd[0]) {
case 'A': x -= num;
break;
case 'D': x += num;
break;
case 'S': y -= num;
break;
case 'W': y += num;
break;
default:
break;
}
}
int main() {
string str;
while (cin >> str) {
int x = 0, y = 0;
vector<string> vec;
int subLen = 0;
for (int i = 0; i < str.size(); i++) {
if (str[i] != ';') {
subLen++;
continue;
}
vec.push_back(str.substr(i - subLen, subLen));
subLen = 0;
}
for (auto & i : vec) {
if (isValid(i)) move(i, x, y);
}
cout << x << "," << y << endl;
}
return 0;
}