/**
实现字符串的循环右移功能,如loopMove("abcde",3)得"cdeab"
**/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
/*
算法一:将最后一个字符存入tmp,将前面其他各位依次后移一位,再将tmp中的数存入首位,如此循环n次,将后面的n位移至前面
*/
int loopMove(char * str,int n)
{
char tmp;
int len = strlen(str);
if(n > len)
return 0;
for(int i = 0;i < n;i++)
{
tmp = str[len-1];
for(int j = 0;j < len-1;j++)
{
str[len-1-j] = str[len-2-j];
}
str[0] = tmp;
}
return 1;
}
/*
算法二:将后面的n个存入新建字符串中,将原字符串前len-n个后移,再将新建字符串中的数拷贝至原字符串前n个
*/
int loopMove1(char * str,int n)
{
int len = strlen(str);
//存储后n个字符
char * tmp = (char *)malloc(n+1);
if(!tmp)
return 0;
for(int i = 0; i < n;i++)
{
tmp[i] = str[len-n+i];
}
tmp[n] = '\0';
//前len-n个后移
for(int j = 0;j < len-n;j++)
{
str[len-1-j] = str[len-1-n];
}
//tmp中的n个元素拷贝至原字符串
for(int k = 0;k < n;k++)
{
str[k] = tmp[k];
}
free(tmp);
return 1;
}
int main()
{
char str[] = "abcdefghijk";
printf("the original string is : %s\n",str);
loopMove(str,5);
printf("the string be loopMoved is : %s\n",str);
char str1[] = "qwertyu";
printf("the original string is : %s\n",str1);
loopMove(str1,3);
printf("the string be loopMoved is : %s\n",str1);
return 1;
}