数组循环移位

题目:给定数组str[],循环左移m位。即如果str=”ABCDEF”,循环左移2位得到 “CDEFAB”。
算法:使用两个倒序,倒序AB得到BA,倒序CDEF得到FEDC,最后全部BAFEDC全部倒序CDEFAB。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <string.h> 
#include <iostream>
using namespace std;

void reverse(char *str,int left,int right)
{
char tmp;
for(int i=left,j=right;i<j;i++,j--)
{
str[i]=str[j];
str[j]=tmp;
}
}

void shift(char *str,int m, int len)
{
reverse(str,0,m-1);
reverse(str,m,len-1);
reverse(str,0,len-1);
}