首页 > 编程 > C++ > 正文

[华为OJ--C++]016-坐标移动

2019-11-08 02:04:52
字体:
来源:转载
供稿:网友

题目描述:

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

算法实现:

#include<iostream>  #include<string>using namespace std;    //************************************************    // * Author: 赵志乾    // * Date: 2017-2-20     // * Declaration: All Rigths Reserved !!!    //***********************************************/  bool IsNumber(char c){	return c>='0'&&c<='9';} bool IsInstruct(string&ret,int&len){	for(int i=0;i<ret.length();i++)	{		if(ret[i]==' ')			continue;		if(!IsNumber(ret[i]))			return false;		else			len=len*10+ret[i]-'0';	}	if(len>99)		return false;	return true;}int main()  {      string initstr;	getline(cin,initstr);	int strlength=0;	for(int i=0;i<initstr.length();i++)	{		if(initstr[i]!=' ')		{			initstr[strlength++]=initstr[i];		}	}	string instr=initstr.substr(0,strlength);	int x=0,y=0;	int index=0;	for(int i=0;i<instr.length();i++)	{		if(instr[i]==';')		{			if(i-index<2)			{				index=i+1;				continue;			}							string ret=instr.substr(index,i-index);			int len=0;			switch(ret[0])			{				case 'A':				case 'a':					if( IsInstruct(ret.substr(1,ret.length()-1),len) )							  x=x-len;							  break;				case 'D':				case 'd':					if( IsInstruct(ret.substr(1,ret.length()-1),len) )							  x=x+len;							  break;				case 'W':				case 'w':					if( IsInstruct(ret.substr(1,ret.length()-1),len) )							  y=y+len;							  break;				case 'S':				case 's':					if( IsInstruct(ret.substr(1,ret.length()-1),len) )							  y=y-len;							  break;			}			index=i+1;		}			}	cout<<x<<','<<y<<endl;    return 0;  }  


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选