实现一个函数,可以左旋字符串中的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个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA

第一种方法  :每次保存第一个字母,然后其余字母一次左移。再把第一个字母放在最后一个位置上 代码: void left_reverse(char*arr, int len, int k) { ...

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

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

左旋字符串的三种实现

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

字符串之字符串左旋

参考自:http://blog.csdn.net/v_july_v/article/details/6322882 左旋转字符串   * 题目:定义字符串的左旋转操作:把字符串...

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

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

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

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

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

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

【每天学点算法题10.15】指定一个字符串,对字符串左旋K位

题目描述:指定一个字符串,进行左旋k位操作。即字符串的前k位字符移到字符串的尾部,形成新的字符串。如把字符串abcdef左旋3位,得到defabc。要求对长度为n的字符串,时间复杂度为O(n)。 ...

C语言strncpy()函数:复制字符串的前n个字符

头文件:#include #include #include int main(void){ char dest1[20]; char src1[] = "abc"; int ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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