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

例:实现字符串左移函数,比如"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;
}
时间: 2024-08-30 06:11:33

小技巧----“三步翻转法”的相关文章

[日常] 算法-旋转字符串-三步翻转法

题目描述 给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串"abcdef"前面的2个字符'a'和'b'移动到字符串的尾部,使得原字符串变成字符串"cdefab".请写一个函数完成此功能,要求对长度为n的字符串操作的时间复杂度为 O(n),空间复杂度为 O(1). 分析与解法 解法二:三步反转法 对于这个问题,换一个角度思考一下. 将一个字符串分成X和Y两个部分,在每部分字符串上定义反转操作,如X^T,即把X的所有字符反转(如,X="

三步翻转法

class Solution { public void reverse(char[] ch, int l ,int r) { for ( ; l<r; l++,r--){ char t = ch[l]; ch[l] = ch[r]; ch[r] = t; } } public void fun(String str, int n, int m){ if(str == null || str.length()==0) return; m %= n; char[] ch = str.toCharA

思科命令配置小技巧三:alias 命令

大家都用过手机上的快捷拨号设置 思科设备是否支持命令的快捷键定义呢 答案是肯定的 suzhouxiaoniu(config)#alias exec xx show ip inter bri  xx是自定义的快捷键名称,可以是数字 suzhouxiaoniu#xx 直接敲定义好的名称Interface                  IP-Address      OK? Method Status                ProtocolFastEthernet1/0          

分享页面级SEO小技巧三点

今天分享三个页面级SEO的小技巧,页面加载速度.网站结构什么的讲出来可能比较抽象,无法直接拿去实践,就不说了,我们讲一点可以立即拿去用的东西,不过,具体操作起来就要靠个人了. 1.增加页面内容,调整关键词密度 最好将关键词布局到页面重要位置,通常所说的F型布局即可,一般未经过专业优化的网站这样做过以后排名会有一个小幅度的提升. 至于原理,搜索引擎的工作主要有四大部分组成:抓取.索引.排序.展现.发外链需要等搜索引擎抓取.过滤.计算,周期长.见效慢,通常要达到质和量的积累才能有良好的效果;内链的建

说话技巧三步曲--摘自《所谓高情商 就是会说话》

说话技巧是工作中必备技能,作为程序员也不例外,好的说话技巧可以起到事半功倍的作用. 1. 不直接表达自己的想法 不要赤裸裸的说出自己的想法,这样往往事与愿违. 2.揣摩对方心理 揣摩对方的心理,可能对你的话做出的反应.想想对方的喜恶 3.考虑符合对方利益的措辞 把对方的利益和自己的利益趋于一致. 比如你觉得家里的柑橘很多,不能放了,希望家人多吃点. 1.第一步,不要直接说"你们多吃点",这样的结果往往是对方直接拒绝 2.第二步:家人可能已经吃了很多柑橘,已经腻了.家人对身体肯定很在意,

iOS项目开发小技巧 (三) --UITableView实现Cell左划删除等自定义功能

今天来介绍下iOS开发中UITableView的Cell左划实现微信中置顶,删除等功能.该功能在iOS8.0以前是需要很复杂的实现,不过github上应该有现成demo,不过今天介绍的是在iOS8.0以后苹果新推出的api,来实现Cell左划自定义控件. 1. 首先创建UITableView视图,实现其俩个代理,UITableViewDelegate和UITableViewDataSource,该处代码就不说了,主要是俩个回调方法 -(UITableViewCell *)tableView:(U

Wince6.0应用开发:三、小技巧揭秘

在Wince6.0的应用开发过程中,掌握一些使用的小技巧,必定会事半功倍 那么,你做好心里准备了吗?3.2.1. 技巧一:我会告诉你你为Wince开发的程序可以在你的电脑上运行!                     这个技巧的用途有两个 1.测试程序能否达到预期效果 还记得我们上一篇帖子在模拟上用的小程序吗? 我们现在PC上运行一下 2.捕捉在Wince上不显示的异常 有时候,在Wince上运行应用程序,即使出错了也不会抛出异常,当这个时候我们只需要在电脑上运行程序便会捕捉到程序的异常,这对

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

题目:实现一个函数,可以左旋字符串中的k个字符. AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 方法一:三步旋转法 左旋程序思路:首先根据画图得知左旋后的结果,然后在分析实现的简约步骤: 第一步:字符串全逆序: 第二步:左边的字符串逆序: 第三步:右边的字符串逆序: 举例:左旋K=1个字符: 首先是头文件和主函数部分: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<windows.h

windows phone 开发常用小技巧 - 退出应用之升级版(三秒内双击退出)

//设置一个DispatcherTimer,控制三秒内再次点击返回键时执行退出逻辑 public void ExitBy2Click(System.ComponentModel.CancelEventArgs e) { if (!IsExit) { IsExit = true; e.Cancel = true; _timer = new DispatcherTimer(); _timer.Start(); SystemTrayMessage.Instance.StartAdv("再按一次退出&q