Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1435223
  • 博文数量: 241
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2253
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-11 22:27
个人简介

--

文章分类

全部博文(241)

文章存档

2021年(3)

2019年(6)

2018年(1)

2017年(9)

2016年(21)

2015年(50)

2014年(125)

2013年(26)

我的朋友

分类: C/C++

2014-03-22 14:05:13

1、题目描述: 字符串处理问题

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

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <string.h>

  3. #define N 512

  4. int x = 0;
  5. int y = 0;

  6. void Move(char* str)
  7. {
  8.     int len;
  9.     int i;
  10.     int move = 0;
  11.     char Dir;
  12.     len = strlen(str);
  13.     if (len<=1)
  14.     {
  15.         return;
  16.     }
  17.     for (i=1; i<len; i++)
  18.     {
  19.         if ( (str[i]>='0') && (str[i]<='9') )
  20.         {
  21.             move = move*10 + str[i] - '0';
  22.         }
  23.         else
  24.         {
  25.             return;
  26.         }
  27.     }
  28.     Dir = str[0];
  29.     if (Dir == 'A') //left
  30.     {
  31.         x -= move;
  32.     }
  33.     if (Dir == 'D') //right
  34.     {
  35.         x += move;
  36.     }
  37.     if (Dir == 'W') // up
  38.     {
  39.         y += move;
  40.     }
  41.     if (Dir == 'S') //down
  42.     {
  43.         y -= move;
  44.     }
  45.     return ;
  46. }

  47. void ChangePos(char* str)
  48. {
  49.     char* tmp;
  50.     char data[20] = {0};
  51.     int i=0;

  52.     if (NULL == str)
  53.     {
  54.         return ;
  55.     }
  56.     tmp = str;
  57.     while (*tmp != '\0')
  58.     {
  59.         if (*tmp != ';')
  60.         {
  61.             data[i++]=*tmp;
  62.         }
  63.         else
  64.         {
  65.             data[i] = '\0';
  66.             Move(data);
  67.             memset(data,'\0',20);
  68.             i = 0;
  69.         }
  70.         tmp++;
  71.     }
  72.     if (i > 0)
  73.     {
  74.         data[i] = '\0';
  75.         Move(data);
  76.         memset(data,'\0',20);
  77.         i = 0;    
  78.     }
  79.     return;
  80. }

  81. int main()
  82. {
  83.     char str[N]={0};
  84.     scanf("%s",str);

  85.     ChangePos(str);
  86.     printf("%d,%d\n",x,y);
  87.     return 0;
  88. }

阅读(1808) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~