字符串的左旋转

问题重述:实现一个

函数,可以左旋字符串k个字符。例如:

abcdef左旋2得到cdefab

方法一:暴力旋转法

#include<stdio.h>
#include<string.h>
void left_remove(char *arr,int n)
{

	int i=0;
	int j=0;
	char ch=0;
	int len=strlen(arr);
	for(i=0;i<n;i++)  //左旋的个数
	{
		ch=arr[0];    //保存第一个字符
		for(j=0;j<len-1;j++)
		{
	     	arr[j]=arr[j+1];
		}
		arr[len-1]=ch;
	}
}


int main()
{
	char arr[]="abcdef";  //abcdef-->bcdefa-->cdefab
	int n=0;
	scanf("%d",&n);
	left_remove(arr,n);
	printf("%s\n",arr);
	return 0;
}

方法一:三步旋转法

初始状态:

a b c d e f

第一步:翻转a,b

b a c d e f
第二步:翻转c,d,e,f


b a f e d c
第三步:全部翻转
c d e f a b
#include<stdio.h>
#include<string.h>
void change(char *left,char *right)
{
	int temp=0;
	while(left<right)
	{
		temp=*left;
		*left=*right;
		*right=temp;
		left++;
		right--;
	}
}
void left_remove(char *p,int n)
{                                //abcdef
	int len=strlen(p);   
	change(p,p+n-1);             //bacdef
	change(p+n,p+len-1);         //bafedc
	change(p,p+len-1);           //cdefab
}
int main()
{
    char arr[]="abcdef";  
	int n=0;
	scanf("%d",&n);
	left_remove(arr,n);
	printf("%s\n",arr);
	return 0;
}

你可能感兴趣的:(字符串)