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

原创 2016年06月02日 10:45:02

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

例如:

AABCD左旋一个字符得到ABCDA

AABCD左旋两个字符得到BCDAA

方法(1):采用循环移位,对需要旋转的k个字符按顺序进行旋转,先将要旋转的一个字符保存起来,将后面的往前挪动一位,再将保存起来的这个字符赋给最后一位,这样连续循环k次,就可以完成了。代码实现如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void left_move(char *p, int n)
{
	int i;
	int len = strlen(p);
	for (i = 0; i < n; i++)
	{
		char tmp = p[0];
		int j = 0;
		for (j = 0; j < len - 1; j++)
		{
			p[j] = p[j + 1];
		}
		p[len - 1] = tmp;
	}
}
int main()
{
	char arr[] = "abcdef";
	int n = 0;
	scanf_s("%d", &n);
	left_move(arr, n);
	printf("%s\n", arr);
	system("pause");
	return 0;
}

方法(2) 三步旋转法,先将要旋转的k个字符串逆序,再将剩余的字符串逆序,最后再对整个字符串逆序就得到了旋转k个字符后的字符串。代码实现如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void reverse(char *left, char *right)
{
	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
void left_move(char *p, int n)
{
	int len = strlen(p);
	reverse(p, p + n - 1);
	reverse(p + n, p + len - 1);
	reverse(p, p + len - 1);
}
int main()
{
	char arr[] = "abcdef";
	int n = 0;
	scanf_s("%d", &n);
	left_move(arr, n);
	printf("%s\n", arr);
	system("pause");
	return 0;
}

分析上面两个方法,方法(1)中至少要循环n*(len-1)次,效率比较低,方法(2)的效率更高一点。


本文出自 “Stand out or Get out” 博客,请务必保留此出处http://jiazhenzhen.blog.51cto.com/10781724/1716689

.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA

1.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 方法一: 算法思想:用移的步数作为while循环条件(每移1位完了减...

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

题目:实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 代码如下: 方法一:#include #include #incl...

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

实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA...

实现一个函数,可以左旋字符串中的k个字符。(三种方法)

abcd1234 左旋4个字符 —–> 1234abcd 方法一:循环移动 这里先把’a’右移7个单位,得到bcd1234a,然后再把’b’右移7个单位>>得到cd123...
  • Tianzez
  • Tianzez
  • 2017年11月01日 18:26
  • 92

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

1.实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB #include #include void left_move(cha...
  • kai29
  • kai29
  • 2017年11月01日 20:56
  • 151

实现一个函数,可以左旋字符串中的k个字符(不同复杂度的算法)

实现一个函数,可以左旋字符串中的k个字符(不同复杂度的算法) 例如: AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 简单分析一下: 1、左旋字符自身长度时,等于...

编写一个函数,可以左旋字符串中k个字符

题目:       实现一个函数,可以左旋字符串中的k个字符。例如:abcdef左旋一个字符得到bcdefaabcdef左旋两个字符得到cdefab题目分析:           对于这个问题,可以用...

把一个字符串左旋k个字符的2种方法

第一种是一个字符一个字符的左移,把第一个字符存临时变量里面,把后面的字符每一个往前移动一个位置,‘\0’不移动,然后把临时变量的值放在‘\0’前面的位置。这样重复k次; 第二种是把需要左移的k个字符...

左旋字符串K个字符的3种实现方法

第一种是先保存字符串第一个字符,然后循环实现。#include #include #include void strShift(char *str, int len, int step) ...

1.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 2.判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1

1.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 将一个字符串左旋k个,首先想到将一个字符串左旋一个,然后把得到的这个新字符...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实现一个函数,可以左旋字符串中的k个字符
举报原因:
原因补充:

(最多只允许输入30个字)