实现一个函数,可以左旋字符串中的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

左旋字符串的三种实现

左旋字符串是许多公司面试官喜欢问到的问题,那么这片博文就是要讲一下左旋字符串的实现以及《剑指offer》里面是怎样解决这个问题。    一.先看看一道面试题    eg:输入一个英语句子,翻转句子中单...
  • litter_driver777
  • litter_driver777
  • 2016年06月11日 14:05
  • 345

左旋字符串

题目要求:实现一个函数,可以左旋字符串中的k个字符。(右旋字符串同理) 例如:ABCDE左旋两个字符串得到CDEAB 代码如下(编译环境为VS2013): #define _CRT_SECUR...
  • qq_39412582
  • qq_39412582
  • 2018年02月01日 11:39
  • 42

01左旋字符串

题目描述:         定义字符串的左旋转操作:把字符串前面的k个字符移动到字符串的尾部。如把字符串abcdef左旋转k=2位得到字符串cdefab。请实现字符串左旋转的函数,要求对长度为n的字符...
  • gqtcgq
  • gqtcgq
  • 2015年05月14日 17:50
  • 336

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

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

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

1.实现一个函数,可以左旋字符串中的k个字符。  ABCD左旋一个字符得到BCDA  ABCD左旋两个字符得到CDAB 方法1 将字符串第一个的字符先复制一份,然后依次将字符串向左移动一位...
  • zlb1051
  • zlb1051
  • 2017年11月05日 22:18
  • 131

左旋右旋字符串

定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。 如把字符串abcdef 左旋转2 位得到字符串cdefab。请实现字符串左旋转的函数。 要求时间对长度为n 的字符串操作的复杂度为...
  • nawuyao
  • nawuyao
  • 2016年01月07日 14:34
  • 438

C语言之——左旋字符串

如:ABCDE左旋一位是BCDEA;左旋两位是CDEAB。 方法一:循环左移法。 先将第一次字符拿出,然后将后面的字符依次向左移1位,刚好最后一个字符空出,把第一个字符放入,当然这里面考虑到这个字符串...
  • f2016913
  • f2016913
  • 2016年10月31日 22:12
  • 265

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

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

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

2.实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 下面看一下实现方法:...
  • FangXiaXin
  • FangXiaXin
  • 2017年04月19日 21:32
  • 107

字符串左旋--循环移位法(c++实现)

#include #include using namespace std; //求最大公倍数gcd算法 int gcd(int a,int b) { int c; while(b>0) { ...
  • woailvmengmeng
  • woailvmengmeng
  • 2014年04月09日 11:10
  • 1002
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实现一个函数,可以左旋字符串中的k个字符
举报原因:
原因补充:

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