题目描述
开发一个坐标计算工具, A 表示向左移动,D 表示向右移动,W 表示向上移动,S 表示向下移动。 从原点 (0,0) 开始移动,从输入字符串里面读取一些坐标,并将最终坐标结果输出。
输入合法坐标为A/D/W/S + 数字,例如A10、W20。 坐标之间以分号分隔。 请注意异常坐标:
- 指令不是 A/D/W/S 开头的直接丢弃
- 后面跟的不是数字,直接丢弃
- 数字长度不限,是合法整数
输入:一行字符串,由分号隔开多条指令 输出:最终 x y 坐标,空格隔开
示例: 输入:A10;S20;W10;D30;X;A1A;B10A11;;A10;过程: A10:x -=10 S20:y -=20 W10:y +=10 D30:x +=30 X:非法 A1A:非法 B10A11:非法 空串:非法 A10:x -=10 结果:x = -10,y = -10 输出:-10 -10
#include <stdio.h> #include <string.h> int main(void) { char buf[1000]; gets(buf); int x = 0, y = 0; char *p = strtok(buf, ";"); while(p != NULL) { int len = strlen(p); // 长度至少2,第一位必须是A/D/W/S if(len >= 2) { char op = p[0]; int num = 0; int valid = 1; for(int i = 1; i < len; i++) { if(p[i] >= '0' && p[i] <= '9') { num = num * 10 + (p[i] - '0'); } else { valid = 0; break; } } if(valid) { switch(op) { case 'A': x -= num; break; case 'D': x += num; break; case 'W': y += num; break; case 'S': y -= num; break; default: break; } } } p = strtok(NULL, ";"); } printf("%d %d\n", x, y); return 0; }