左旋字符串源码

STL左旋转字符串Rotate的深入理解和自我实现 STL对左旋转字符串针对三种不同数据结构进行了不同的实现。 对单向链表采用的是同步位移,双向链表是三次翻转,都很简单,主要看看针对随机存取的数组做的循环位移实现。 STL这个版本的源码如下: template void __rotate(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator 阅读详情
#include <iostream>
using namespace std;

void Reverse( char *pBegin, char *pEnd )
{
	if( pBegin == NULL || pEnd == NULL )
		return;

	while( pBegin < pEnd )
	{
		char tmp = *pBegin;
		*pBegin = *pEnd;
		*pEnd = tmp;

		pBegin++, pEnd--;
	}
}

char *ReverseSentence( char *pData )
{
	if( pData == NULL )
		return NULL;

	char *pBegin = pData;
	char *pEnd = pData;
	while( *pEnd != '\0' )
		pEnd++;
	pEnd--;

	//反转整个句子
	Reverse( pBegin, pEnd );

	//反转句子中个每个单词
	pBegin = pEnd = pData;
	while( *pBegin != '\0' )
	{
		if( *pBegin == ' ' )
		{
			pBegin++;
			pEnd++;
		}
		else if( *pEnd == ' ' || *pEnd == '\0' )
		{
			Reverse( pBegin, --pEnd );
			pBegin = ++pEnd;
		}else
		{
			pEnd++;
		}
	}
	return pData;
}

void LeftReverse( char *pData, int n )
{
	if( pData == NULL )
		return;
	char *pBegin = pData;
	char *pEnd = pData;
	while( *pEnd != '\0' )
	{
		pEnd++;
	}
	pEnd--;

	int mid = (n % strlen(pData)) - 1;

	Reverse( pBegin, pBegin + mid );
	cout << "左旋反转1: " << pData << endl;
	Reverse( pBegin + mid + 1, pEnd );
	cout << "左旋反转2: " << pData << endl;
	Reverse( pBegin, pEnd ); //pData
	cout << "左旋反转3: " << pData << endl;

}

void Test( char *testName, char *input, char *expectedResult )
{
	if( testName != NULL)
		cout << testName << " begins: " << endl;

	if( input != NULL )
	{
		cout << "反转前:" << input << endl; 
		//ReverseSentence( input );
		LeftReverse( input, 2);  //翻转2个字符
		cout << "反转后:" << input << endl;  
	}

	if( (input == NULL && expectedResult == NULL)
		|| (input != NULL && strcmp(input, expectedResult) == 0) )
		cout << "通过!" << endl;
	else
		cout << "失败!" << endl;
}

void TestReverse()
{
	char input[] = "ABCDEFG";
	char expected[] = "CDEFGAB";

	Test( "Left Reverse", input, expected );
}

void TestReverse0()
{
	char input[] = "I am a student.";//这些字符串放置在堆栈中
    char expected[] = "student. a am I";
	
	Test( "One Sentence", input, expected );
	//以下会产生错误,这些字符串放置在.rdata段中,只读
	//Test( "One word", "I am a student.", "student. a am I" );
}

void TestReverse1()
{
	char input[] = "lfz";
	char expected[] = "lfz";
	
	Test( "One word", input, expected );
}

void TestReverse2()
{
	Test( "NULL", NULL, NULL );
}

void TestReverse3()
{
	char input[] = "";
	char expected[] = "";
	
	Test( "Empty", input, expected );
}

void TestReverse4()
{
	char input[] = " ";
	char expected[] = " ";
	
	Test( "One Blanks", input, expected );

}

void TestReverse5()
{
	char input[] = "   ";
	char expected[] = "   ";
	
	Test( "Three Blanks", input, expected );

}

void main()
{
	//
	TestReverse();
	//TestReverse0();
	//TestReverse1();
	//TestReverse2();
	//TestReverse3();
	//TestReverse4();
	//TestReverse5();

	system( "PAUSE");
}

最强解析面试题:左旋转字符串 文章目录最强解析面试题:左旋转字符串题目示例1思路代码附录 最强解析面试题:左旋转字符串 文章讲解 “ 左旋转字符串 ” 经典面试题,包含思路及源码,及解惑! 题目 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列 S,请你把其循环左移 K 位后的序列输出(保证 K 小于等于 S 的长度)。例如,字符序列S=”abcXYZdef”,要求输出循环左移 3 位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它! 示例 阅读详情

相关推荐

在Window上安装和配置VTK9.x,并在QT项目中调试VTK是否可用

VTK+MSVC+Qt Creator + CMake配置

qq_42279379的博客 1000

剑指offer系列源码-左旋转字符串

题目1362:左旋转字符串(Move!Move!!Move!!!) 时间限制:2 秒内存限制:32 兆特殊判题:否提交:1577解决:669 题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZ

朝花夕拾 756

Android WIFI体系:深入解析WifiLock与MulticastLock的底层实现与性能优化

本文深入解析Android WIFI体系中WifiLock与MulticastLock的底层实现机制与性能优化策略。WifiLock通过阻止Wi-Fi休眠提升网络性能,尤其WIFI_MODE_FULL_HIGH_PERF模式可显著降低延迟;MulticastLock则控制组播数据接收,但会增加功耗。文章详细探讨了其与wpa_supplicant、HAL层的交互,并提供高性能场景下的优化实践与功耗平衡方案。

php55的博客 1079

剑指offer 面试题42—翻转单词顺序VS左旋转字符串

题目1: 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。 例如输入字符串"I am a student.",则输出"student. a am I"。 题目2: 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。 例如输入字符串"abcdefg"和数字2,左旋转2位得到的结果"cdefgab"。 题目1基本思想: 第一步:翻转句子中的所

小地盘的诺克萨斯 883

P4语言实战:如何用Barefoot Tofino实现自定义网络协议(避坑指南)

本文是一份详尽的P4语言实战指南,重点讲解如何利用Barefoot Tofino可编程交换芯片实现自定义网络协议。内容涵盖从P4编程模型解析、自定义协议头定义,到匹配-动作流水线构建、性能优化及生产环境部署的全过程,并特别分享了在资源管理、字节序、调试技巧等方面的宝贵避坑经验,旨在帮助网络开发者和研究人员掌握数据平面编程的核心能力。

echo99的专栏 640

深入解析SOC芯片设计中DFT OCC与ATPG的协同优化策略

本文深入探讨了在复杂SOC芯片设计中,DFT(可测试性设计)的核心组件OCC(片上时钟控制器)与ATPG(自动测试向量生成)的协同优化策略。文章从基本原理出发,分析了OCC作为测试时钟管理者的关键作用,以及ATPG作为故障检测引擎的工作机制,并重点阐述了二者在测试架构选择、参数对齐、低功耗测试等场景下的协同方法与实战技巧,旨在实现更高的测试覆盖率与更低的测试成本。

efc123456的博客 1034

剑指Offer第42题(翻转单词顺序VS左旋转字符串)

(本博客旨在个人总结回顾) 题目描述: 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student.",则输出"student. a am I"。 解题思路: 通过两次翻转实现: ①翻转一次:得到".tneduts a ma I" ②翻转字符串中的每个单词: 得到"student. ...

qq_23903863的博客 194

金蝶Apusic应用服务器 未授权目录遍历漏洞复现

由于金蝶Apusic应用服务器/admin/protected/selector/server_file/files、/admin/protected/selector/server_file/folders 等接口没有进行校验和过滤,直接将参数拼接到文件操作中,导致出现目录遍历漏洞,未经身份验证的远程攻击者可通过此漏洞读取系统内部系统文件路径及信息,导致信息泄露,系统处于极不安全状态。

0xSec 2169

Java中关于substring()函数的相关用法及源码

最近在LeetCode刷题,遇到一些关于字符串操作的题,算是比较基础的,可以调用函数直接解决,所以就在这写写一些关于这些函数的用法。 第一个是substring() 有两个用法: ①substring(int beginIndex):返回一个从beginIndex开始截取的新的字符串。 用法如下: public class Demo01 { public static void main(Str...

qq_44658573的博客 808

CAPL与人工智能结合

AI模型是指通过机器学习算法训练得到的模型,可以用于分类、回归、聚类等任务。常见的AI模型包括神经网络、支持向量机、决策树等。在汽车电子系统中,AI模型可以用于故障诊断、驾驶行为分析、自动驾驶等场景。实时决策是指在汽车电子系统中,根据AI模型的预测结果,实时做出决策。实时决策可以用于自动驾驶、故障诊断等场景。通过本文的学习,读者应该对CAPL与人工智能结合有了初步的了解,并能够编写复杂的CAPL脚本。

闲人编程的博客 1480

【Coze搞钱实战】24. 从零实现精准用户画像:Coze+企业微信打造智能导购推送系统(附完整代码)

电商运营中,“客服重复询问用户需求、无法精准推荐”是转化率低的核心痛点——日均200人次咨询,73%的问题是重复的,首单转化率仅14%。本文基于Coze平台sys_uuid用户识别功能、企业微信API与多维表格,打造“用户行为→自动打标→标签存储→智能推送”全链路方案:通过分类分层标签体系捕捉用户偏好,Coze自动识别用户并打标,飞书多维表格存储标签数据,企业微信触发个性化推送。实操后可使客服重复询问率下降62%,意向客户转化率提升81%,首单转化率提升64%。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 543

c++入门99题11-20

这道题让我对递归有了新的认识,同时这里调用函数时要注意,这里不可以使用。如果使用三元是白给题,不使用任何比较符号的话暂时还解不出来。这里使用了一个取模运算实现了类似循环队列的效果。来递归,会使得递归执行次数多非常非常多。异或的性质,任何一个数异或上自己都等于。只要将原来的数异或上与之位数相同的。其实就是统计原来的数字中有没有尾。直接上等差数列求和公式就可以了。ascii码的简单应用。,而任何一个数异或上。(除去0本身以外)。按题目要求实现即可。...

smallwind256的博客 230

12-RK平台U-Boot启动流程

先看概述,把这一章要回答的问题摆出来,带着问题听。RK 特有的 BootROM -> MiniLoader -> SPL -> U-Boot -> Kernel。这是因为 RK 平台使用闭源的 DDR 初始化固件,需要通过 MiniLoader 来加载和运行。为什么多一层?这是 RK 平台的特殊性决定的。RK 平台使用闭源的 DDR 初始化固件,这段代码 Rockchip 不开源,只能以二进制形式提供,它需要一个载体来加载和运行,这个载体就是 MiniLoader。

内核笔记 1147

[剑指Offer]-左旋转字符串

题目描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如输入字符串"abcdefg"和数字2,该函数将返回左旋转2位得到的结果"cdefgab"。 解题思路 以"abcdefg"为例,我们可以把它分为两部分。 由于想把它的前两个字符移到后面,我们就把前两个字符分到第一部分,把后面的所有字符都分到第二部分。 我们先分别翻转这两部分,于...

LeoByte的编程驿站 2229

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

左旋字符串

Q 左旋转字符串    * 题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。   * 如把字符串abcdef左旋转2位得到字符串cdefab。   * 请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。     C++实现: 解法一:不考虑时间和空间的限制。设移动的位数为k。则循环k次,每次移动1位。这样的空间复杂

mingyunduoshou的专栏 1188

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【C语言每日一题】判断字符串旋转结果(附加字符串左旋详解)

大伙们好!😄又到了小陈每日一题的时间了~ 😋😋😋今天也带来了十分有趣的题目!🥰🥰🥰用C语言实现——~判断字符串旋转结果(附加字符串左旋详解),这个题目很有意思,新颖的同时又很值得思考!🤗为了讲明白这个题目,我将由浅入深,先从字符串左旋讲起,再讲字符串左旋的判断,我现在迫不及待地要和大家分享~!😄🤗🤗

陈大大陈的博客 1920

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

剑指offer第43题:左旋转字符串

剑指offer第43题:左旋转字符串题目描述左旋转字符串源码 题目描述 左旋转字符串 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它! 源码 class So...

可爱的小腊肉 210

C++算法(八)左旋转字符串

旋转字符串的几种解决方案

woody218的博客 791

左旋转字符串&&翻转单词顺序列

左旋转字符串 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它! 解题思路 1.借助ArrayList添加字符数组 2.借助StringBuffer 代码 im...

weixin_41676282的博客 291

左旋转字符串(简单难度),步步图解让你明白Spring循环依赖

题目概述(简单难度)字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = “abcdefg”, k = 2输出: “cdefgab”示例 2:输入: s = “lrloseumgh”, k = 6输出: “umghlrlose”思路与代码思路1(字符串切片)应用字符串切片函数,可方便实现左旋转字符串。

m0_61331573的博客 839

微软之左旋转字符串

微软之左旋转字符串

《致青春》——云梦泽 1003

左旋转字符串

在C语言中,字符串的各种操作一直是必须掌握的一部分内容,那么我们来用不同的方法讨论一下字符串操作其中之一的左旋转字符串。 一、题目描述: 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部,如把字符串 abcdef 左旋转 2 位得到字符串 cdefab。请实现字符串左旋转的函数, 要求对长度为n的字符串操作的时间复杂度为O(n), 空间复杂度为O(1)。 二、解决

eagle_007WH的博客 836

【C语言】实现一个函数,可以左旋字符串中的K个字符

题目说明: 要求实现一个函数,可以左旋字符串中的K个字符; 其中: ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 解法一: 解题思路: 拿到一组字符串之后,我们首先设置一个临时变量,存放字符串中的第一个字符。 然后把字符串中的其余字符通过循环依次前移一位,最后再把临时变量的值赋给字符串的最后的一位。 以上是字符串的一次左旋,要左旋几次就可以通过循环重...

sofia_m的博客 875

【100题】第二十六 左旋转字符串

一,题目:(本题为某年考研试题)               定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。               如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。               要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。 二,分析:如果不考虑时间和空间复杂度的限制,

小田的专栏 2035

微软,Google面试题 (21) —— 左旋字符串(循环移位)

题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。解法一:不考虑时间和空间的限制。设移动的位数为k。则循环k次,每次移动1位。这样的空间复杂度是O(1),时间复杂度是O(n*k)。如果k小于n,则O(n^2)。解法二:最直接的方法。开辟一块大小为n的内存,将前k个字符拷贝到后k个位置。将后面的n-k个字符拷贝到新空间前n-k个位置。这

cesc 2469

左旋字符

问题描述: 实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA , ABCD左旋两个字符得到CDAB 。 该问题有三种解法: 1. 第一种方法是通过左移字符串, 例如当左旋2个字符时,可以先左旋一个字符,要左旋一个字符,可以先将第二个以及它后面的全部字符全部向左移动一位,之后再将之前的第一个字符赋值给最后一个字符,但再赋值之前要先保存第一个字符;之后要左...

shanghx_123的博客 351
上一篇: 字符串反转C++实现源码(带测试用例)
下一篇: 两个数组A、B,求在A中出现而不在B中的数(求不相交集)
vshadow
博客等级 码龄18年 29粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值