编写一个函数,实现将char型的字符串循环右移n个位置。比如,原来是"abcdefghi",如果n=2,则移位后将变为"hiabcdefg"。
如下,实现了函数LoopMove,并编写测试程序来验证其正确性,在DevCpp中实现。
其算法复杂度为O(n)。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cassert>
using namespace std;
void LoopMove(char *str,int n)
{
assert(str != NULL);
int len=strlen(str);
int len_copy = len;
n = n % len;
int step = len - n;
char p[len + 1];
char *free = str;
for(int i = 0;i < step;i++)
{
free++;
}
int p_index = 0;
int q_index = 0;
while(len_copy != 0)
{
while(*free != '\0')
{
p[p_index] = *free;
p_index++;
free++;
len_copy--;
}
if(*free == '\0')
{
p[p_index] = str[q_index];
p_index++;
q_index++;
len_copy--;
}
}
p[len]='\0';
//cout <<"p " <<p << endl;
strncpy(str,p,len);
}
int main()
{
char str[]="abcdefghi";
int n;
cin >> n;
LoopMove(str,n);
cout << str << endl;
system("pause");
return 0;
}