题目: 坐标移动
描述
我们定义一个无限大的二维网格上有一个小人,小人初始位置为 (0,0)(0,0) 点,小人可以读取指令上下左右移动。
一个合法的指令由三至四个符号组成:
∙ ∙第一个符号为 “A/D/W/S””A/D/W/S” 中的一个,代表小人移动的方向;分别代表向左、向右、向上、向下移动;记某个时刻小人的坐标为 (x,y)(x,y) ,向左移动一格即抵达 (x−1,y)(x−1,y) 、向右移动一格即抵达 (x+1,y)(x+1,y) 、向上移动一格即抵达 (x,y+1)(x,y+1) 、向下移动一格即抵达 (x,y−1)(x,y−1) 。
∙ ∙最后一个符号为 “;””;” ,代表指令的结束,该符号固定存在;
∙ ∙中间为一个 1-991-99 的数字,代表小人移动的距离。
如果你遇到了一个不合法的指令,则直接忽略;例如,指令 “A100;””A100;” 是不合法的,因为 100100 超出了 1-991-99 的范围;”Y10;””Y10;” 也是不合法的,因为 YY 不是 “A/D/W/S””A/D/W/S” 中的一个。
输出小人最终的坐标。
输入描述:
在一行上输入一个长度 1≦length(s)≦1041≦length(s)≦104 ,仅由可见字符构成的字符串 ss ,代表输入的指令序列。
输出描述:
在一行上输出一个两个整数,代表小人最终位置的横纵坐标,使用逗号间隔。
示例1
输入:
1 | A10;S20;W10;D30;X;A1A;B10A11;;A10; |
输出:
1 | 10,-10 |
说明:
1 | 对于这个样例,我们模拟小人的移动过程: |
示例2
输入:
1 | ABC;AKL;DA1; |
输出:
1 | 0,0 |
题解
1 |
|
思路
- 输入处理:使用
getline
读取整行输入字符串。 - 指令分割:遍历字符串,每次遇到分号时,截取从上一个分号到当前分号的子字符串作为指令。
- 合法性验证:
- 长度检查:指令长度必须为2或3。
- 方向检查:首字符必须是
A
、D
、W
或S
。 - 数字检查:中间部分必须为1-99的整数。
此题挺好
HJ31 单词倒排 这道题与本题解法类似,都是将分割的的字符串存到vector容器里,再统一处理