字符串的循环移位

假设字符串:abcdefg

左循环两位:cdefgab

右循环两位:fgabcde

规律: AB->BA==((A的反转)(B的反转))的反转=(B的反转)的反转(A的反转)的反转=BA

1 // 将一个字符串中某个子串反序
2 void reverseOrder(char * str, int p, int q)
3 {
4      char temp;
5      while (p < q)
6     {
7 temp = str[p];
8          str[p] = str[q];
9          str[q] = temp;
10          p ++;
11          q --;
12     }
13 }
14 void shift_n(char * str, int n)
15 {
16      if ( !str)
17          return ;
18      int len = strlen(str);
19      int t = n % len;//循环移动的位数大于字符串的长度
20      reverseOrder(str, 0 , len - t -1 );
21      reverseOrder(str, len - t, len -1 );
22      reverseOrder(str, 0 , len -1 );
23 }

对于左循环:A=ab;B=cdefg;

对于右循环:A=abcde;B=fg;

对于上面的算法左右循环是相同的,只是AB字符串的划分不同而已。

猜你喜欢

转载自1527zhaobin.iteye.com/blog/1613852