您的位置:首页 > 编程语言

编程实现字符串的循环右移

2018-03-19 14:20 141 查看
例题:输入一个字符串和一个整数,输出右移后的字符串。例如输入字符串str=“1234567”, 整型n=3,输出字符串str=“5671234”。
思想:step1.生成一个辅助数组temp
存放要前移的部分“567”。
         step2.将没有前移的部分从后向前依次向后移动。str变成“1231234”。

          step3.将辅助数组中的字符覆盖str前n位。str变成“5671234”。
char* Move(char *s, int n)
{
assert(s!=NULL);
int length=strlen(s);
if(n%length==0)//移动为长度的倍数相当于没移动
return s;
char *t=s;
char *temp=(char *)malloc(n);
//t指针指向末尾最后一个字符
while(*t){
t++;
}
t--;
//strlen函数实际上做了一次循环,这里其实可以用t-s+1得出length
n=n%length;
//将原字符串要提前的先储存进temp数组中
for(int i=0;i<n;i++)
{
temp[i]=*(t-n+1+i);
}
//将原字符串要往后挪的字符从后往前依次向后挪n个位置
for(int i=0;i<(length-n);i++){
*(t-i)=*(t-n-i);
}
//将temp数组中的字符串覆盖原字符串的前n个位置
for(int i=0;i<n;i++){
s[i]=temp[i];
}
//释放堆内存
free(temp);
return s;

}
int main(){
char str[100]="";
int n=0;
scanf("%s %d",str,&n);
Move(str,n);
cout<<str;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐