移动坐标

来源:互联网 发布:禁入证券市场 知乎 编辑:程序博客网 时间:2024/06/02 13:37
<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;//舍去 }}          } }}


                                             
0 0