#include <iostream> using namespace std; //将前i个元素复制到临时数组中 template<class T> void func0(T a[],int len,int i){ char *temp=new T[i]; int j; for(j=0;j<i;j++){ temp[j]=a[j]; } for(j=0;j<len;j++) if(j<len-i) a[j]=a[j+i]; else a[j]=temp[(j+i)-len]; delete temp; } template<class T> void my_swap(T& a,T& b){ T temp; temp=a; a=b; b=temp; } template<class T> void my_reverse(T a[],int f,int l){ int i=f,j=l; while(i<j){ my_swap(a[i++],a[j--]); } } //基于交换 template<class T> void func2(T a[],int len,int i){ my_reverse(a,0,i-1); my_reverse(a,i,len-1); my_reverse(a,0,len-1); } //移动i位 template<class T> void func1(T a[],int len,int i){ int g=1;//最大公约数 for(int j=1;j<len && i;j++) if(len % j ==0 && i % j == 0 ) g=j; for(int j=0;j<g;j++){ T temp=a[j]; int l,r; l=j; while(true){ r=l+i; if (r >= len) r=r-len; if (r == j) break; a[l]=a[r]; l=r; } a[l]=temp; } } int main(){ char a[]="abcde233446878fgh"; func0(a,17,7); cout<<a<<endl; char b[]="abcde233446878fgh"; func1(b,17,7); cout<<b<<endl; char c[]="abcde233446878fgh"; func2(c,17,7); cout<<c<<endl; system("pause"); return 0; }