您的位置:首页 > 其它

1.实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB

2017-11-05 22:18 459 查看
1.实现一个函数,可以左旋字符串中的k个字符。 
ABCD左旋一个字符得到BCDA 

ABCD左旋两个字符得到CDAB

方法1

将字符串第一个的字符先复制一份,然后依次将字符串向左移动一位,再将第一个字符赋值到最后。若要左旋K个字符,只需循环K次。

方法2

将字符串分为两部分,先将前K个字符逆置,再将后一部分字符串逆置,最后将整个字符串逆置。

方法3

先开辟一个2*len+1字节的空间,在字符串c后面在连接一个同样的字符串c,如ABCDEABCDE,要求左旋k个字符的字符串,只需偏移k次,将接下来的len个字符复制到字符数组c中。#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//len可不由参数传递,可在Left函数内求得
//void Left(char c[
4000
], 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;
// }
//}

//void Reverse(char *start, char *end)
//{
// while (start<end)
// {
// *start ^= *end;
// *end ^= *start;
// *start ^= *end;
// start++;
// end--;
// }
//}
//
//void Left(char c[], int len , int k)
//{
// k = k%len;
// Reverse(c, c+k-1);
// Reverse(c+k, c+len-1);
// Reverse(c, c+len-1);
//}

void Left(char c[], int len , int k)
{
k = k%len;
char *p = (char *)malloc((2*len+1)*sizeof(char));
strcpy(p, c);
strcat(p, c);
strncpy(c, p+k, len);
free(p);
}

int main()
{
char c[] = "ABCDE";
int k = 2;
int len = strlen(c);
printf("左旋前:%s\n", c);
Left(c,len,k);
printf("左旋后:%s\n", c);
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐