Chinaunix首页 | 论坛 | 博客
  • 博客访问: 831908
  • 博文数量: 157
  • 博客积分: 542
  • 博客等级: 中士
  • 技术积分: 1696
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-21 20:21
文章分类
文章存档

2017年(1)

2016年(2)

2015年(6)

2014年(42)

2013年(77)

2012年(19)

2011年(10)

分类: C/C++

2013-09-25 17:06:42

首先把字符串旋转分解成一个一个轮流的移动.

由于这里实现中每次移动会是这样:   比如 src = "abcdefg"  向左移动3位后 就变成了 defgcba, 实际结果是defgabc;

所以才额外添加了一个if 判断语句,用来保证后面的 元素的顺序。   

       

点击(此处)折叠或打开

  1. char *
  2. str_whirl(char *src, int len, int k)
  3. {
  4.     int index_i, index_j, index_x;
  5.     char tmp, *tmp_dest;

  6.     tmp_dest = src;

  7.     k %= len;

  8.     if(src == NULL || k == 0)
  9.         return tmp_dest;

  10.     index_j = 1;
  11.     while(k)
  12.     {
  13.         for(index_i = 0; index_i < len - index_j; index_i++)
  14.         {
  15.             tmp = src[index_i];
  16.             src[index_i] = src[index_i+1];
  17.             src[index_i+1] = tmp;
  18.             if(index_j > 1 && index_i == len - index_j -1)
  19.             {

  20.                 for(index_x = index_i + 1; index_x < len - 1; index_x++)
  21.                 {
  22.                     tmp = src[index_x];
  23.                     src[index_x] = src[index_x+1];
  24.                     src[index_x + 1] = tmp;
  25.                 }
  26.             }

  27.         }

  28.         k--;
  29.         index_j++;
  30.     }

  31.     return tmp_dest;
  32. }

  33. int
  34. main(int argc, char *argv[])
  35. {
  36.     char src[10] = "3abcdefg12";

  37.     char *tmp;
  38.     printf("the src before -> %s\n", src);
  39.     tmp = str_whirl(src, 10, 3);

  40.     printf("\tsrc = %s\n", src);
  41.     printf("\ttmp = %s\n", tmp);

  42.     return;
  43. }

阅读(1012) | 评论(0) | 转发(0) |
0

上一篇:insert sort算法实现

下一篇:僵尸进程处理

给主人留下些什么吧!~~