给定字符串统一右移两位,最右边两位移动到新字符串的最左端,称为循环右移。字符串的右移操作,将通过对字符串的拆分、组合来实现。
#include <stdio.h>
#include <stdlib.h>
void loopMove(char *pStr,int steps)
{
int length=0,i=0;
char *sub=pStr,*str;
while (*pStr!='\0') //统计源字符串长度
{
length++;
pStr++;
}
pStr--; //字符串指针指向最后一个字符
if (steps>length) //steps是字符串循环右移位数,如果位数比长度还大,就会造成无用一圈循环
steps=steps-length; //避免造成无用循环
str=(char *)malloc(steps); //为右移多出来的字符串申请空间
for (i=0;i<steps;i++) //循环步长下多出来的字符串保存到str中
str[i]=sub[length-steps+i];
for (i=0;i<length-steps;i++) //不是多出来的字符串整体右移steps位
sub[length-i-1]=sub[length-steps-i-1];
for (i=0;i<steps;i++) //合并两部分字符串为一个字符串
sub[i]=str[i]; //将str中的字符串补充到sub串的起始部分
}
int main()
{
char a[]="abcdef";
printf("最初的字符串为:\n%s\n",a);
loopMove(a,2);
printf("循环右移两位后为:\n%s\n",a);
system("pause");
return 0;
}