问题重述:实现一个
函数,可以左旋字符串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 |
| 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;
}原文:http://19940325.blog.51cto.com/10789287/1715636