分享

字符串循环右移

 韩韩forever 2015-01-07

1、字符串循环右移---

解法:根据题意,编写的函数能把字符串循环右移n位。例如字符串“abcdefghi”,如果n=2,移位后是“hiabcdefg”。

(1)先翻转前段“gfedcba hi”,

(2)再翻转后段“gfedcba ih”

(3)最后翻转整个“hi abcdefg”,得到想要的结果。

下面是c语言的指针操作代码

  1. //7/14 16:44  
  2. #include <stdio.h>  
  3. #include <stdlib.h>  
  4. #include <string.h>  
  5.   
  6. void reserve(char *p, char *q)  
  7. {  
  8.     while(p < q)  
  9.     {  
  10.         *p ^= *q;  //利用异或运算得到两字符交换  
  11.         *q ^= *p;  
  12.         *p ^= *q;  
  13.         p++;  
  14.         q--;  
  15.     }  
  16. }  
  17. void loopMove(char *str, int steps)  
  18. {  
  19.     char *p = str;  
  20.     int len = strlen(str);  
  21.     char *q = p + len - 1 - steps;  
  22.     //printf("%s\n", q);  
  23.   
  24.     reserve(p, q);   //先翻转前一段  
  25.     p = q + 1;  
  26.     q = str + len - 1;  
  27.     reserve(p, q);   //翻转后一段  
  28.     p = str;  
  29.     reserve(p, q);   //翻转整个字符串  
  30.     //printf("%s\n", str);  
  31. }  
  32.   
  33. int main()  
  34. {  
  35.     char string[] = "123456789";  
  36.     int steps = 0;  
  37.   
  38.     printf("string: %s\n", string);  
  39.     printf("input step: ");  
  40.     scanf("%d", &steps);  
  41.     loopMove(string, steps);  
  42.     printf("after loopMove %d: %s\n", steps, string);  
  43.   
  44.     return 0;  
  45. }  


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多