实现字符串循环右移指定位数;
思路:
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;
}
运行结果: