//首选我们来写一个左旋函数。
int main()
{
char a[10]={0};
printf("请输入字符串:");
gets(a);
zuoxuan(a);
return 0;
}
左旋函数:
void zuoxuan(char* p )
{
int k=0;int len=0;
printf("请输入要左旋几个字母:");
scanf("%d",&k);
len=strlen(p);//我们要左旋最多只能左旋字符串本身数那么多个字母
while(len)//左旋次数
{
int i=0;
int tmp=p[0];//把第一个字母给空变量tmp
for(i=0;i<len-1;i++)
{
p[i]=p[i+1];//把第二个值给第一个,第三个给第二个
}
p[len-1]=tmp;//tmp里面存着第一个字母的值,把tmp传给最后一个值就是把第一个值传给最后一个。这样就完成了从头到尾的左旋。
len--;//len要不断--,直到为0就不再左旋;
}
printf("%s",p);
}
运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/adf423d860571a83b37b90ebac369665.png)
已经实现了全部左旋的功能。
然后我们来实现K的功能,即输入几就左旋几个,那么我们只需要把len改成k就可以了。
void zuoxuan(char* p )
{
int k=0;int len=0;
len=strlen(p);
while(k)//左旋次数
{
int i=0;
int tmp=p[0];
for(i=0;i<len-1;i++)
{
p[i]=p[i+1];
}
p[len-1]=tmp;
k--;//k减减,k直到为0就不再左旋
}
printf("%s",p);
}
现在就已经实现了功能:
![](https://i-blog.csdnimg.cn/blog_migrate/39521a1b8c0a067e332e1d1ad6a15411.png)
但是不够完美,如果输入abcde,五个字母,但是我输入的k值确实6怎么办
![](https://i-blog.csdnimg.cn/blog_migrate/8e1c5049ef6351a41d07e17d3a4d629a.png)
我们发现它是按左旋最大值5去运行的
我们加一个判断条件,如果输入的K>len(p)//大于字符串本身长度,那就重新输入
if(k>len)
{
printf("要旋转的字母多于字符串本身。");
goto again;
}
加一个goto again语句,again放到请重新输入那里
所有代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void zuoxuan(char* p )
{
int k=0;int len=0;
again:
printf("请输入要左旋几个字母:");
scanf("%d",&k);
len=strlen(p);
if(k>len)
{
printf("要旋转的字母多于字符串本身。");
goto again;
}
while(k)
{
int i=0;
int tmp=p[0];
for(i=0;i<len-1;i++)
{
p[i]=p[i+1];
}
p[len-1]=tmp;
k--;
}
printf("%s",p);
}
int main()
{
//char a[10]="abcde";
char a[10]={0};
printf("请输入字符串:");
gets(a);
zuoxuan(a);
return 0;
}
运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/831e3e615f6452b927d386236656f81d.png)