您的位置:首页 > 其它

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

2015-11-04 11:44 435 查看
实现一个函数,可以左旋字符串中的k个字符。AABCD左旋一个字符得到ABCDAAABCD左旋两个字符得到BCDAA1、可以通过字符串互换,每左旋一次,字符串第一个移到最后一个,其余字符整体向前移动一位。代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void reverse(char *str,int len,int k)
{
int i;
while(k--)
{//左旋几次,整个字符串调整几次
char tep=str[0];//第一个元素和最后一个元素互换
for(i=0;i<len-1;i++)
{
str[i]=str[i+1];
}
str[len-1]=tep;
}
}

int main()
{
char arr[10]={0};
int len,k;
gets(arr);
scanf("%d",&k);
len=strlen(arr);
k=k%len;//如果左旋次数大于字符串长度出现重复,所以要k需要模len
reverse(arr,len,k);
printf("%s\n",arr);
system("pause");
return 0;
}
2、上述方法效率较低。也可以把整个字符串看成两部分,然后逆置,在整体进行逆置就可以实现左旋k个字符。
代码如下:
#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>

void revolve(char *left,char *right)
{
while(left<right)//进行逆序排列
{
char temp=*left;
*left=*right;
*right=temp;
left++;
right--;
}
}

void left_move(char *str,int len,int k)
{
assert(str);//指针有效性判断
revolve(str,str+k-1);//逆序需要左旋的部分
revolve(str+k,str+len-1);//逆序其余字符
revolve(str,str+len-1);//逆序整个字符串
}

int main()
{
char arr[10]={0};
int len,k;
gets(arr);
scanf("%d",&k);
len=strlen(arr);
k=k%len;//如果左旋次数大于字符串长度出现重复,所以要k需要模len
left_move(arr,len,k);
printf("%s\n",arr);
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  左旋字符 函数