定义一个二维坐标结构position,用(x,y)来表示其坐标,又分别定义出A、D、S、W类方法来表示其移动。思路是对输入的字符串按分号进行切割,把切割出来的字符串apply到position对象上,apply时按题目要求对数据进行检查
#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;
class position
{
private:
int m_x;
int m_y;
void A(int dist)
{
m_x -= dist;
}
void D(int dist)
{
m_x += dist;
}
void S(int dist)
{
m_y -= dist;
}
void W(int dist)
{
m_y += dist;
}
public:
position(int x, int y)
{
m_x = x;
m_y = y;
}
void output()
{
printf("%d,%d\n", m_x, m_y);
}
void apply(const string& str)
{
int dist = 0;
if(str.length() == 2)
{
if(str[1] >= '0' && str[1] <= '9')
{
dist = str[1] -'0';
}
}
else if(str.length() == 3)
{
if(str[1] >= '0' && str[1] <= '9' && str[2] >= '0' && str[2] <= '9')
{
dist = (str[1]-'0') * 10 + (str[2]-'0');
}
}
else
{
//不合法,直接返回;
return;
}
switch(str[0])
{
case 'A':
A(dist);
break;
case 'D':
D(dist);
break;
case 'S':
S(dist);
break;
case 'W':
W(dist);
break;
default:
break;
}
}
};
int main()
{
string str;
while(cin >> str)
{
position pos(0,0);
while(str.length() > 0)
{
size_t offset = str.find(';');
string tmp = str.substr(0,offset);
pos.apply(tmp);
str = str.substr(offset+1);
}
pos.output();
}
return 0;
}
京公网安备 11010502036488号