题目描述
开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。
输入:
合法坐标为A(或者D或者W或者S) + 数字(两位以内)
坐标之间以;分隔。
非法坐标点需要进行丢弃。如AA10; A1A; $%$; YAD; 等。
下面是一个简单的例子 如:
A10;S20;W10;D30;X;A1A;B10A11;;A10;
处理过程:
起点(0,0)
+ A10 = (-10,0)
+ S20 = (-10,-20)
+ W10 = (-10,-10)
+ D30 = (20,-10)
+ x = 无效
+ A1A = 无效
+ B10A11 = 无效
+ 一个空 不影响
+ A10 = (10,-10)
结果 (10, -10)
输入描述:
一行字符串
输出描述:
最终坐标,以,分隔
输入例子:
A10;S20;W10;D30;X;A1A;B10A11;;A10;
输出例子:
10,-10
1 #include<stdafx.h> 2 #include<iostream> 3 #include<string> 4 5 using namespace std; 6 7 int main(void) 8 { 9 string str,temp; 10 11 while (getline(cin, str)) 12 { 13 int X = 0, Y = 0, value = 0, pos = 0; 14 15 while ((pos = str.find_first_of(";")) != str.npos) 16 { 17 temp = str.substr(0, pos); 18 str = str.substr(pos + 1, str.size()); 19 20 if (temp.size() <= 1) 21 { 22 continue; 23 } 24 else if (temp.size() == 2) 25 { 26 if ((temp[1] - '0') >= 0 && (temp[1] - '0') <= 9) 27 { 28 value = temp[1] - '0'; 29 } 30 else 31 { 32 continue; 33 } 34 if (temp[0] == 'A') 35 { 36 X -= value; 37 } 38 else if (temp[0] == 'D') 39 { 40 X += value; 41 } 42 else if (temp[0] == 'S') 43 { 44 Y -= value; 45 } 46 else if (temp[0] == 'W') 47 { 48 Y += value; 49 } 50 else 51 { 52 continue; 53 } 54 } 55 else if (temp.size() == 3) 56 { 57 if ((temp[1] - '0') >= 0 && (temp[1] - '0') <= 9 && (temp[2] - '0') >= 0 && (temp[2] - '0') <= 9) 58 { 59 value = 10 * (temp[1] - '0') + (temp[2] - '0'); 60 } 61 else 62 { 63 continue; 64 } 65 if (temp[0] == 'A') 66 { 67 X -= value; 68 } 69 else if (temp[0] == 'D') 70 { 71 X += value; 72 } 73 else if (temp[0] == 'S') 74 { 75 Y -= value; 76 } 77 else if (temp[0] == 'W') 78 { 79 Y += value; 80 } 81 else 82 { 83 continue; 84 } 85 } 86 else 87 { 88 continue; 89 } 90 } 91 cout << X << ',' << Y << endl; 92 } 93 94 return 0; 95 }