坐标移动

题目描述

开发一个坐标计算工具, 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)

Analysis:

1 分割字符串

2 判断分割后的字符串坐标是否合法

3对合法的字符串坐标判断方向,并将字符串中的数字提取出来,在前面的坐标基础上进行运算

4 确定运算规则:初始坐标(x,y)

字符串为A num===》x-=num
字符串为S num===》y-=num
字符串为W num===》y+=num
字符串为D num===》x+=num
 
codes:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     string str;
 6     while(cin>>str)
 7     {
 8         pair<int,int> point(0,0);
 9         size_t found=str.find_first_of(';');
10         int start=0;
11 
12         while(found!=string::npos)
13         {
14             string s1=str.substr(start,found-start);
15             start=found+1;
16             found=str.find_first_of(';',found+1);
17 
18             if(s1.size()>1 && s1.size()<=3)
19             {
20                 char c=s1[0];
21                 int n=0;
22                 int invalid=0;
23                 for(int i=1;i<s1.size();i++)
24                 {
25                     if(s1[i]>='0' && s1[i]<='9') n=n*10+(s1[i]-'0');
26                     else {
27                         invalid=1;
28                         break;
29                     }
30                 }
31                 if(invalid==0){
32                     switch(c)
33                     {
34                         case 'A':{point.first-=n;break;}
35                         case 'D':{point.first+=n;break;}
36                         case 'W':{point.second+=n;break;}
37                         case 'S':{point.second-=n;break;}
38 
39                     }
40                 }
41             }
42             //cout<<point.first<<','<<point.second<<endl;
43         }
44         cout<<point.first<<','<<point.second<<endl;
45     }
46     return 0;
47 }
原文地址:https://www.cnblogs.com/dragondragon/p/11213634.html