假设字符串: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字符串的划分不同而已。