题目:实现一个函数,可以左旋字符串中的k个字符。
ABCDE左旋一个字符得到BCDEA,ABCDE左旋两个字符得到CDEAB
分析:可以将ABCD存在一个字符数组中,左旋一个字符相当于把第一个存到临时变量中,然后将第一个字符之后的字符循环赋值给前一个位置,最后将临时变量的值放置到最后一个位置,就完成了字符的左旋。 如果想要左旋k个字符则需要使用循环完成,每次取一个字符,后面的字符依次往前,下一次继续取一个字符,后面的字符继续往前,就实现了k个字符的左旋。
算法实现:
void Left(char c[], int len, int k) //方法1
{
k = k%len; //对于5个字符的字符串,左旋3次和左旋8次结果一样
int j = 0;
for (j=0; j<k; j++)
{
int i = 0;
char tmp = c[0];
for (i=0; i<len-1; i++)
{
c[i] = c[i+1];
}
c[i] = tmp;
}
}
代码如下:
#include <stdio.h>
#include <string.h>
void Left(char c[], int len, int k) //方法1
{
k = k%len; //对于5个字符的字符串,左旋3次和左旋8次结果一样
int j = 0;
for (j=0; j<k; j++)
{
int i = 0;
char tmp = c[0];
for (i=0; i<len-1; i++)
{
c[i] = c[i+1];
}
c[i] = tmp;
}
}
int main()
{
char c[] = "ABCDE";
int k = 0;
printf("左旋字符的个数-> ");
scanf("%d",&k);
int len = strlen(c);
printf("左旋前:%s\n", c);
Left(c, len, k);
printf("左旋后:%s\n", c);
return 0;
}
运行结果展示:
存在的优化:可使用C语言string.h库中的库函数进行实现。