循环右移n次,分为三步来做。用循环右移两位举例来说:
第一,将helloworld分成两部分,第一部分hellowor,第二部分ld。
第二,将这两部分分别变为倒序,第一部分为rowolleh,第二部分为dl,将两部分放在一起为rowollehdl。
第三,将第二部的结果变为倒序,即为ldhellowor,就是我们所需要的结果
程序编写如下
//////////////////////////////////循环右移
n 位
#include<stdio.h>
#include<string.h>
void main()
{
int i,temp,n=19;
char str[]="helloworld";
int len=strlen(str);
if(n>len)
{
n%=len;
}
for(i=0;i<(len-n)/2;i++) //将第一部分变为逆序
{
temp=str[i];
str[i]=str[len-n-1-i];
str[len-n-1-i]=temp;
}
for(i=len-n;i<(len-n)+n/2;i++) //将第二部分变为逆序
{
temp=str[i];
str[i]=str[2*len-n-1-i];
str[2*len-n-1-i]=temp;
}
for(i=0;i<len/2;i++) //将逆序后的第一部分和第二部分整体再做逆序
{
temp=str[i];
str[i]=str[len-1-i];
str[len-1-i]=temp;
}
printf("%s",str);
}