1. 程式人生 > >華為測試 坐標移動

華為測試 坐標移動

esp popu 例子 atoi clu mov dex ios ++i

開發一個坐標計算工具, 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;

int X=0,Y=0;
void move(string s);
int main()
{
	string str;
	string temp;
	cin>>str;
	for(string::size_type index=0;index!=str.size();++index)
	{
		if(str[index]!=';')
			temp.push_back(str[index]);
		else
		{
			 move(temp);
			 temp.clear();
		}
	}
	cout<<X<<","<<Y<<endl;
	return 0;
}
void move(string s)
{
	if(s.empty())
		return;
	if(s.size()>3 || s.size()<=1)
		return;
	if(!(s[0]!='A'||s[0]!='S'||s[0]!='W'||s[0]!='D'))
		return;
	if((s[1]>'9'||s[1]<'0')||(s[s.size()-1]>'9'||s[s.size()-1]<'0'))
		return;
	string ID;
	int num=0;
	if(s[0]=='A')
	{
		for(string::size_type idx=1;idx!=s.size();++idx)
			ID.push_back(s[idx]);
		num=atoi(ID.c_str());
		X-=num;
	}
	if(s[0]=='W')
	{
		for(string::size_type idx=1;idx!=s.size();++idx)
			ID.push_back(s[idx]);
		num=atoi(ID.c_str());
		Y+=num;
	}
	if(s[0]=='S')
	{
		for(string::size_type idx=1;idx!=s.size();++idx)
			ID.push_back(s[idx]);
		num=atoi(ID.c_str());
		Y-=num;
	}
	if(s[0]=='D')
	{
		for(string::size_type idx=1;idx!=s.size();++idx)
			ID.push_back(s[idx]);
		num=atoi(ID.c_str());
		X+=num;
	}
}



華為測試 坐標移動