题目内容:

实现一个函数,可以左旋字符串中的k个字符。

例如·:ABCD左旋一个字符得到BCDA

ABCD左旋两个字符得到CDAB

一.方法一

#include<stdio.h>
#include<string.h>
//三步反转法
//abcdef
//ab cdef 先切开
//ba fedc 两部分都反转
//bafedc 分开的两部分再组合在一起
//cdefab 再倒序
void reverse(char *left,char *right)
{
char tmp=*left;
*left=*right;
*right=tmp;
left++;
right--;
}
void left_move(char arr[],int k)
{
int len=strlen(arr);
reverse(arr,arr+k);//首先逆序前两个字符(左边的)
reverse(arr+k+1,arr+len-1);//再逆序剩下的字符(右边的)
reverse(arr,arr+len-1);//再将整个字符串逆序
}
int main()
{
char arr[]="abcdef";
left_move(arr,2);
printf("%s\n",arr);
return 0;
}

二.方法二

#include<stdio.h>
#include<string.h>
void left_move(char arr[],int k)
{
int i=0;
int len=strlen(arr);
for(i=0;i<k;i++)
{
//1.创建一个变量
char tmp=arr[0];
//2.开始将字符一个一个的向前挪
int j=0;
for(j=0;j<len-1;j++)
{
arr[j]=arr[j+1];
}
//3.将原来的第一个字符放到最后一个去
arr[len-1]=tmp;
}
}
int main()
{
char arr[]="abcdef";
left_move(arr,2);
printf("%s\n",arr);
return 0;
}