关闭

小技巧----“三步翻转法”

标签: 小技巧----三步翻转法
4710人阅读 评论(4) 收藏 举报
分类:

例:实现字符串左移函数,比如"abcdefghi"循环左移3位就是”defghiabc".




#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>

void revers(char *left,char *right)                      //翻转函数,left代表起始位置,right代表结束位置
{
	assert(left);
	assert(right);
	char tmp = 0;
	while (left < right)
	{
		tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
void leftLoopMove(char *pStr, unsigned short steps)
{
	assert(pStr);
	int len = strlen(pStr);                   
	steps = steps%len;                                    //这样可以处理steps不合法的情况
	revers(pStr,pStr+steps-1);                            //首先翻转前steps个字符
	revers(pStr + steps, pStr + len - 1);                 //再翻转剩下的字符
	revers(pStr, pStr + len - 1);                         //再将整体翻转
} 
int main()
{
	char arr[50] = { 0 };
	unsigned short steps = 0;               //要右移的个数
	scanf("%s%hd",arr,&steps);
	leftLoopMove(arr,steps);
	printf("%s\n", arr);
	system("pause");
	return 0;
}


2
1
查看评论

1.1字符串旋转--左移,右移x位置--三步反转

给定一个字符串,对其移动,向左或者 向右移动x位置。 这类题对于我们最初学习c语言就是一个典型题。 大概思路:   1。循环x次,每次执行一步左移或右移。时间复杂度O(m*n)。 进一步优化:   三步反转法---时间复杂度O(n)。  具体思路: ...
  • qq_33951440
  • qq_33951440
  • 2016-06-24 14:35
  • 835

三步翻转法------有意思的方法

主要是为了三步翻转法,
  • My_heart_
  • My_heart_
  • 2016-04-17 20:38
  • 751

小技巧----“三步翻转法”

例:实现字符串右移函数,比如"abcdefghi"循环右移3位就是”ghiabcdef“. #include #include #include #include void revers(char *left,char *right) ...
  • LF_2016
  • LF_2016
  • 2016-05-31 22:08
  • 4710

"三步反转"处理字符串

istringstream、ostringstream、stringstream 类介绍 . http://www.cnblogs.com/gamesky/archive/2013/01/09/2852356.html 下面的输入处理比较常用:#include <cstdio> ...
  • qq_26437925
  • qq_26437925
  • 2016-05-01 21:09
  • 250

字符数组逆序(三步旋转法)

有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。 /* 有一个字符数组的内容为:"student a am i...
  • qq_33724710
  • qq_33724710
  • 2016-04-06 20:04
  • 521

字符串翻转练习—三步翻转法

文章出处:github 题目描述 给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”前面的2个字符'a'和'b'移动到字符串的尾部,使得原字符串变成字符串“cdefab”。请写一个函数完成此功能,要求对长度为n的...
  • u010016196
  • u010016196
  • 2015-04-19 10:12
  • 1582

字符串左旋右旋——三步旋转法和移相法

字符串左旋右旋——三步旋转法和移相法!(K个字符)
  • yx20130919
  • yx20130919
  • 2016-04-19 15:15
  • 978

翻转字符串,改进“三步翻转”,减少交换次数

参考牛客网学习视频 https://www.nowcoder.com/live/11/11/1
  • qq_26437925
  • qq_26437925
  • 2016-12-20 22:24
  • 214

三步翻转法

[4,5,1,2,3] → [5,4,1,2,3] → [5,4,3,2,1] → [1,2,3,4,5]【Recover rotated sorted array】 【Rotate String】 【Valid palindrome】 找到断点,分别reverse 调三次自定义的rever...
  • gaoyanSB
  • gaoyanSB
  • 2017-08-15 23:06
  • 68

关于三步翻转法的小题

有一个字符数组的内容为:"student a am i",  请你将数组的内容改为"i am a student". 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。 三步翻转法! #include #include v...
  • zf354458968
  • zf354458968
  • 2016-04-10 18:31
  • 81
    博客专栏
    文章分类
    最新评论