问题描述:实现一个函数,可以左旋字符串中的k个字符。
思路:字符的旋转悠很多方法,在这里我要说的是“三步旋转法”。通过把需要旋转的字符串逆置,紧接着把剩下的字符串逆置,最后把所有的字符串逆置得到旋转个k字符。
比如:把ABCDEF左旋2个字符。
第一次把AB逆置,得到:BACDEF
第二次把剩下的字符串逆置,得到:BAFEDC
第三次把所有的字符串逆置,得到:CDEFAB
#include<stdio.h>
#include<string.h>
void reverse(char *left,char *right) //实现字符串的翻转逆置
{
while(left<right)
{
char tmp=*left;
*left=*right;
*right=tmp;
left++;
right--;
}
}
void left_spin(char *src,int i) //对字符串数组实现左旋
{
int len=strlen(src)-1;
reverse(src,src+i-1); //1.先翻转需要左旋的k个字符
reverse(src+i,src+len); //2.将剩下的字符进行翻转
reverse(src,src+len); //3.翻转所有的字符
}
int main()
{
int i=2; //需要左旋的位数
char src[]="ABCDEF";
left_spin(src,i);
printf("%s\n",src);
system("pause");
return 0;
}
结果:
右旋和左旋的思路一样,只是在旋转时的left和right不一样。
void right_spin(char *src,int i)
{
int len=strlen(src)-1;
reverse(src+len-i,src+len); //1.先翻转需要右旋的k个字符
reverse(src,src+len-i); //2.将剩下的字符进行翻转
reverse(src,src+len); //3.翻转所有的字符
}
结果: