移动坐标

<pre name="code" class="cpp">/*
开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。
从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。

输入:
合法坐标为A(或者D或者W或者S) + 数字(两位以内)
 
坐标之间以;分隔。
 
非法坐标点需要进行丢弃。如AA10;  A1A;  $%$;  YAD; 等。
 
下面是一个简单的例子 如:
 
A10;S20;W10;D30;X;A1A;B10A11;;A10;
*/

void movepoint(char* s,int* x,int* y);
void main(){
	char str[MAX]="0";
	int x=0,y=0;
	while(1){
	  scanf("%s",str);
	  movepoint(str,&x,&y);
	  cout<<x<<","<<y<<endl;
	}
}
//输入字符串,输出最终移动的坐标
void movepoint(char* s,int* x,int* y){

	char* p;
	char ss[MAX][MAX]={""};
   //1、以分号分割字符串,分割的子串存储到二维数组ss中。
	p=strtok(s,";");
	int i=0;
	while(p!='\0'){
		sprintf(ss[i],"%s",p);
		p=strtok(NULL,";");
		i++;
	}
	int k=0,k1=0,k2=0;
	for(int j=0;j<i;j++){
		   k1=(ss[j][1]-48);//0的ascii码为48
		   k2=(ss[j][2]-48);
     //2、判别子串是否有效分两步:第一步  长度是否为3,第1个和第2个字符是否是数字(从0开始算)
      if( (strlen(ss[j])==2 && 0<=k1&&k1<=9)|| (strlen(ss[j])==3 && 0<=k1&&k1<=9 && 0<=k2&&k2<=9) ){
		  //3、将数字子串转为数字int性
		  k=atoi(ss[j]+1);
		   //4、第二步:判别子串的第一个字符是否为ADSW;
			switch(ss[j][0]){
			case 'A':{//左移动
				        *x-=k;break;      
					 }
		    case 'D':{//右移动
				        *x+=k;break;
					 }
			case 'W':{//上移动
				        *y+=k;break;
					 }
		    case 'S':{//下移动
				        *y-=k;break;
					 }
			default:{
				       break;//舍去
					 }

			}
    
	      } 
	}
}



                
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值