码迷,mamicode.com
首页 > 其他好文 > 详细

字符串的左旋转

时间:2015-11-23 06:40:21      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:字符串

问题重述:实现一个

函数,可以左旋字符串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;
}

方法一:三步旋转法

初始状态:

abcdef

第一步:翻转a,b

bacdef
第二步:翻转c,d,e,f


bafedc
第三步:全部翻转
cdefab
#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;
}

字符串的左旋转

标签:字符串

原文地址:http://19940325.blog.51cto.com/10789287/1715636

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!