思路:
对于"abcdef",如果右移两位,则先将"abcd"反向为"dcba",然后将"ef"反向为"fe",然后再最后整个字符串反向一次,变成"efabcd"
程序代码如下:
#include <cstdio>
#include <cassert>
#include <cstring>
void Reverse(char *str, int start,int end)
{
assert(str!=NULL);
//反序
char* strs = str+start;
char* stre = str+end;
for (;strs<stre;)
{
char temp = *strs;
*strs = *stre;
*stre = temp;
strs++;stre--;
}
}
void MoveRight(char *str, int n)
{
assert(str!=NULL);
int t = n%strlen(str);
//反序
Reverse(str,0,strlen(str)-t-1);
Reverse(str,strlen(str)-t,strlen(str)-1);
Reverse(str,0,strlen(str)-1);
}
int main()
{
char str[] = "abcdefghi";
MoveRight(str,10);
printf(str);
}