数组循环移位算法详细介绍:http://blog.chinaunix.net/uid-26642637-id-3291386.html
方法1」
利用memcpy函数,需开辟临时空间。先把从a+n-k到a+n-1这k个字符,存到tmp中;然后,把以a开始的地址空间中的字符复制到a+k开始的地址空间中去;最后,把tmp的k个字符放回以a开始的地址空间中去。
a | ... | a+n-k-1 | a+n-k | ... | a+n-1 |
|
「方法1版本2」
先看循环右移一个字符的思路:首先,保存最有一个非' '字符;然后将字符数组从最后一个非' '字符开始,依次后移;最后将已保存的最后一个字符放到第一字符所在位置处。循环右移k个字符,只需将上述过程重复k次即可。
|
方法2
转载自:http://blog.csdn.net/zz198808/article/details/7539827
// Perverse.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> void Reverse(char a[],int begin,int end) { for (;begin<end;begin++,end--) { char temp=a[end]; a[end]=a[begin]; a[begin]=temp; } } void RightShift(char *array,int N,int K) { K%=N; Reverse(array,0,N-K-1); Reverse(array,N-K,N-1); Reverse(array,0,N-1); } void LeftShift(char* array,int N,int K) { K%=N; Reverse(array,K,N-1); Reverse(array,0,K-1); Reverse(array,0,N-1); } int _tmain(int argc, _TCHAR* argv[]) { char a[]="abcd1234"; /*Reverse(a,1,2); for (int i=0;i<5;i++) { printf("%3c ",a[i]); } system("pause");*/ LeftShift(a,8,2); for (int i=0;i<8;i++) { printf("%c",a[i]); } system("pause"); return 0; }