一聚教程网:一个值得你收藏的教程网站

热门教程

C语言 坐标移动详解及实例代码

时间:2022-06-25 04:40:50 编辑:袖梨 来源:一聚教程网

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

Code:

 

 代码如下复制代码

#include

#include

usingnamespacestd;

  

boolisValid(string s,char&key,int&step){

  if(s.size()<2>3)returnfalse;

  if(s[0] !='A'&& s[0] !='D'&& s[0] !='W'&& s[0] !='S')

    returnfalse;

  key = s[0];

  if(s.size() == 2 && s[1] >=Ɔ'&& s[1] <=Ə'){

    step = s[1] -Ɔ'

    returntrue;

  }

  if(s.size() == 3 && s[1] >=Ɔ'&& s[1] <=ə'&&>=Ɔ'&& s[2] <=Ə'){

    step = (s[1] -Ɔ') * 10 + (s[2] -Ɔ');

    returntrue;

  }

  returnfalse;

}

  

  

voidcaculator(string s,int&x,int&y,charkey,intstep){

  switch(key){

  case'A':

    x -= step;

    break;

  case'D':

    x += step;

    break;

  case'W':

    y += step;

    break;

  case'S':

    y -= step;

    break;

  }

  return;

}

  

intmain(){

  string str;

  while(cin >> str){

    intx = 0;

    inty = 0;

    inti = 0;

    while(i

      string temp;

      charkey;

      intstep;

      while(str[i] !=''){

        temp.push_back(str[i]);

        i++;

      }

      if(isValid(temp, key, step))

        caculator(temp, x, y, key, step);

      i++;

    }

    cout << x <<','<< y<

  }

  return0;

}

 

热门栏目