//这一次的修改参照了几位高手的代码,真没想到,从这样一个编程题目中可以学到这么多的东西,真的很直
#include <stdio.h>
#include <vector>
#include <string>
using namespace std;
#define DOWN 0
#define RIGHT 1
#define UP 2
#define LEFT 3
inline int INT(char *x,int len)
//全局函数将字符串转换为int
//在这里定义为inline是经过了再三的考虑啊
//终于明白了c++中inline的用意,哈哈,
//原来c++真的不亚于c阿,看来要学一c++了
{
int out=0;
for(int i=0;i<len;i++)
{
out = out*10+x[i]-48;
}
return out;
}
class DrawLines
{
int x,y;
int dx,dy;
int direct;
vector<string> result;
void OnLeft();
void OnForward();
public:
DrawLines()
{
int i,j;
result.resize(20);
x=0;
y=0;
dx=0;
dy=1;
direct=DOWN;
for(i=0;i<20;i++)
{
for(j=0;j<20;j++)
{
result[i]+=".";
}
}
}
vector<string> execute(vector<string> &str);
};
void DrawLines::OnLeft()
{
direct++;
direct%=4;
switch(direct)
{
case DOWN: dx=0;dy=1;break;
case RIGHT: dx=1;dy=0;break;
case UP: dx=0;dy=-1;break;
case LEFT: dx=-1;dy=0;break;
default:break;
}
}
void DrawLines::OnForward()
{
x+=dx;
y+=dy;
result[y][x]='X';
}
vector<string> DrawLines::execute(vector<string> &strs)
{
int num=0;
int i,j;
for(i=0;i<strs.size();i++)
{
if(strs[i][0]=='L')
OnLeft();
if(strs[i][0]=='F')
{
int size=strs[i].size()-8;
char *temp=new char(size);
strcpy(temp,strs[i].substr(8,8+size).c_str());//在字符串的操作方面我还差得好远呀,要加油学以下老鸟们的
num=INT(temp,size);//获得前进的步数
if(num!=0)result[0][0]='X';
for(j=0;j<num;j++)
OnForward();
}
}
return result;
}