字符串循环右移

来源:互联网 发布:橘子 芥川龙之介 知乎 编辑:程序博客网 时间:2024/05/16 13:43

实现字符串循环右移指定位数;

思路:

1、首先计算字符串尾部移到头部的字符个数;
2、分配一个相同大小的堆内存来临时保存这些字符;
3、做循环将头部字符移到尾部;
4、做第二次循环将堆内存中的字符复制到字符串头部。

具体代码如下:

#include <iostream>using namespace std;void loopMove(char *str,int n){char *temp=NULL;int strLen=0;char *head=str; //指向字符串头if(str==NULL)return ;while(*str++);strLen=str-head-1;//计算字符串长度strlen(str);n=n%strLen;//计算字符串尾部移到头部的字符个数;temp=(char *)malloc(n);for(int i=0;i<n;i++){temp[i]=head[strLen-n+i];//临时存放从尾部移到头部的字符}for(i=strLen-1;i>=n;i--){head[i]=head[i-n];}for(i=0;i<n;i++){head[i]=temp[i];//从临时内存区复制尾部字符}free(temp);}int main(){char str[50];int n;cout<<"please input a string: ";gets(str);cout<<"please input step: ";cin>>n;loopMove(str,n);cout<<"after totate right "<<n<<": "<<str<<endl;return 0;}
运行结果: