42.翻转单词顺序 VS 左旋转字符串(C++版本)
题目一:
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字符一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。
实现代码:
void Reverse(char* pBegin, char* pEnd)
{if (nullptr == pBegin || nullptr == pEnd) return;while (pBegin < pEnd){std::swap(*pBegin, *pEnd);++pBegin;--pEnd;}
}
void ReverseSentence(char* pData)
{if (nullptr == pData) return;int size = std::strlen(pData);char* pBegin = pData;char* pEnd = pData + size - 1;Reverse(pBegin, pEnd);char* pWordBegin = pBegin;char* pWordEnd = pBegin;while (true){while (*pWordBegin == ' ') ++pWordBegin; // 跳过空格if (*pWordBegin == '\0') return; // 已经到达字符串结尾pWordEnd = pWordBegin;while (*pWordEnd != '\0' && *pWordEnd != ' ') ++pWordEnd;--pWordEnd; // pWordEnd指向单词的最有一个字母Reverse(pWordBegin, pWordEnd);pWordBegin = ++pWordEnd; // pWordBegin域pWordEnd都指向该单词之后的下一个位置}
}
题目二:
字符串的左旋转操作时把字符串前面的若干个字符串移到字符串的尾部。请定义一个函数实现字符串左旋操作的功能。比如输入字符串"abcdefg"和数字2,该函数将返回左旋转2位得到的"cedfgab"。
代码实现:
void LeftRotateString(char* pData, int destCount)
{if (nullptr == pData) return;int size = std::strlen(pData);if (destCount < 1) return;destCount = destCount % size;char* pLeftBegin = pData;char* pLeftEnd = pData + destCount - 1;char* pRightBegin = pData + destCount;char* pRightEnd = pData + size - 1;Reverse(pLeftBegin, pLeftEnd);Reverse(pRightBegin, pRightEnd);Reverse(pLeftBegin, pRightEnd);
}
42.翻转单词顺序 VS 左旋转字符串(C++版本)相关推荐
- 【剑指offer-Java版】42翻转单词顺序VS左旋转字符串
反转单词顺序以及左旋转字符串:输入一个英文句子,翻转句子中的单词顺序,单词内部的字母顺序是不变的 – I am a student. -> student. am I 第一步,翻转句子中的所有字 ...
- [剑指offer]面试题42:翻转单词顺序 VS左旋转字符串
面试题42:翻转单词顺序 VS左旋转字符串 题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a st ...
- 翻转单词顺序与左旋转字符串
题目一:输入一个英文句子,翻转句子中单词的顺序.但是单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a student.",则输出" ...
- 翻转单词顺序和左旋转字符串
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理. 例如输入字符串"I am a student.",则输出"stu ...
- 剑指Offer:翻转单词顺序 vs 左旋转字符串
题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内部的顺序不变.为简单起见 ,标点符号和普通字母一样处理.例如输入字符串"I am a student. ",则输出" ...
- 剑指offer面试题[42]-反转单词顺序VS左旋转字符串
题目1: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=&quo ...
- 42翻转单词顺序列+注意该题找单词的方法
题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,"st ...
- 【剑指offer{40-44}】和为S的连续正数序列、和为S的两个数字、左旋转字符串、翻转单词顺序列、扑克牌顺子
文章目录 和为S的连续正数序列 题目描述 C++代码 和为S的两个数字 题目描述 C++代码 左旋转字符串 题目描述 C++代码 翻转单词顺序列 题目描述 C++代码 扑克牌顺子 题目描述 C++代码 ...
- 《剑指offer》-- 和为S的连续整数序列、和为S的两个数字、左旋转字符串、翻转单词顺序列
一.和为S的连续整数序列: 1.题目: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100 ...
- 代码随想录算法训练营第08天 | LeetCode 344.反转字符串,541. 反转字符串2,剑指Offer 05.替换空格,151.翻转字符串里的单词,剑指Offer58-II.左旋转字符串
LeetCode [344. 反转字符串] 题目:编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须**原地修改输入数组**. ...
最新文章
- java升序问题_JAVA并发理解之重排序问题
- 解决bootstrap下的图片自适应问题
- 强人工智能基本问题:全局控制与自组织
- Data Geekery发布了Java ORM工具jOOQ的3.9.0版,用于构建类型安全查询
- leetcode算法题--旋转链表
- [改善Java代码]生成子列表后不要再操作原列表
- 一个报文的路由器之旅_报文的交换和寻址转发
- Spring-学习笔记09【JdbcTemplate的基本使用】
- oracle注入过滤了单引号,sql绕过单引号限制继续注入的解决方法
- influxdb连续查询CQ和保留策略RP
- HBase编程 API入门系列之HTable pool(6)
- php如何读取excel合并单元格_PHP读取excel中合并的单元格的值
- [北京昌平] 企名片寻找合适的伙伴,一起做数据,让数据不再难找难应用,做全球企业数据服务商...
- 小米手机抢购背后的摩尔定律
- 多功能计算机器在线,多功能数学计算器(RedCrab The Calculator)
- 西瓜视频怎么做伪原创
- [人脸活体检测] 论文: Learning Deep Models for Face Anti-Spoofing: Binary or Auxiliary Supervision
- 李现助阵定格夜色之美,荣耀最强自拍手机亲民开售
- 证券数据接口 查询证券编码及基本上市信息
- 软件测试关于确认与验证 正确的是,验证和确认到底是什么?