例:abcdefgh,循环右移K=3位,就成:fghabcde
思路:从上面的例子可以看出,结果就是将后面的K位与前面的N-K位调换位置即可。将字符串逆置,就使得前后位置发生了变化,但是前后两部分的字符顺序出现了逆置,所以在逆置整个字符串时,首先将两小部分分别逆置,最后在整体逆置。
1, abcdefgh ->abcde , fgh
2, edcba , hgf
3, fghabcde
//逆置字符串
void reverse(char* str,int left,int right)
{
while(left < right)
{
swap(str[left],str[right]);
left++;
right--;
}
}
void RightMove(char* str,int len,int k)
{
k = k%len;
reverse(str,0,len-k-1);
reverse(str,len-k,len-1);
reverse(str,0,len-1);
}