《剑指offer》第五十八题(翻转单词顺序)
// 面试题58(一):翻转单词顺序
// 题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
// 为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",
// 则输出"student. a am I"。 #include <iostream> void Reverse(char *pBegin, char *pEnd); char* ReverseSentence(char *pData)
{
if (pData == nullptr)
return nullptr; char *pBegin = pData; char *pEnd = pData;
while (*pEnd != '\0')
pEnd++;
pEnd--;//得到最后不为'\0'的地址 // 翻转整个句子
Reverse(pBegin, pEnd); // 再翻转句子中的每个单词
pBegin = pEnd = pData;
while (*pBegin != '\0')
{
if (*pBegin == ' ')//接下面这句,如果为空格,就把头尾节点都加一
{
pBegin++;
pEnd++;
}
else if (*pEnd == ' ' || *pEnd == '\0')//先找到单词的尾,然后反转单词,然后把pBegin设为++pEnd
{
Reverse(pBegin, --pEnd);
pBegin = ++pEnd;
}
else//让尾指针一直增加,直到满足上面这句
pEnd++;
} return pData;
} void Reverse(char *pBegin, char *pEnd)//交换子函数
{
if (pBegin == nullptr || pEnd == nullptr)
return; while (pBegin < pEnd)
{
char temp = *pBegin;
*pBegin = *pEnd;
*pEnd = temp; pBegin++, pEnd--;
}
}
// ====================测试代码====================
void Test(const char* testName,char* input, const char* expectedResult)
{
if (testName != nullptr)
printf("%s begins: ", testName); ReverseSentence(input); if ((input == nullptr && expectedResult == nullptr)
|| (input != nullptr && strcmp(input, expectedResult) == ))
printf("Passed.\n\n");
else
printf("Failed.\n\n");
} // 功能测试,句子中有多个单词
void Test1()
{
char input[] = "I am a student.";
char expected[] = "student. a am I"; Test("Test1", input, expected);
} // 功能测试,句子中只有一个单词
void Test2()
{
char input[] = "Wonderful";
char expected[] = "Wonderful"; Test("Test2", input, expected);
} // 鲁棒性测试
void Test3()
{
Test("Test3", nullptr, nullptr);
} // 边界值测试,测试空字符串
void Test4()
{
char input[] = "";
char expected[] = "";
Test("Test4", input, expected);
} // 边界值测试,字符串中只有空格
void Test5()
{
char input[] = " ";
char expected[] = " ";
Test("Test5", input, expected);
} int main(int argc, char* argv[])
{
Test1();
Test2();
Test3();
Test4();
Test5();
system("pause");
return ;
}
《剑指offer》第五十八题(翻转单词顺序)的更多相关文章
- 《剑指offer》第二十八题(对称的二叉树)
// 面试题28:对称的二叉树 // 题目:请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和 // 它的镜像一样,那么它是对称的. #include <iostream> ...
- 《剑指offer》第十八题(删除链表中重复的结点)
// 面试题18(二):删除链表中重复的结点 // 题目:在一个排序的链表中,如何删除重复的结点?例如,在图3.4(a)中重复 // 结点被删除之后,链表如图3.4(b)所示. #include &l ...
- 《剑指offer》第十八题(在O(1)时间删除链表结点)
// 面试题18(一):在O(1)时间删除链表结点 // 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该 // 结点. #include <iostream> ...
- 【剑指offer】面试题42:翻转单词顺序 VS 左旋转字符串
题目: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”abcX ...
- (剑指Offer)面试题42:翻转单词顺序
题目: 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理. 例如输入字符串“I am a student.”,则输出"student. ...
- 《剑指offer》面试题58 - I. 翻转单词顺序
问题描述 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a student. ",则输出&quo ...
- 剑指Offer(二十八):数组中出现次数超过一半的数字
剑指Offer(二十八):数组中出现次数超过一半的数字 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn. ...
- 《剑指offer》第二十六题(树的子结构)
// 面试题26:树的子结构 // 题目:输入两棵二叉树A和B,判断B是不是A的子结构. #include <iostream> struct BinaryTreeNode { doubl ...
- 《剑指offer》第十九题(正则表达式匹配)
// 面试题19:正则表达式匹配 // 题目:请实现一个函数用来匹配包含'.'和'*'的正则表达式.模式中的字符'.' // 表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次).在本题 ...
- 《剑指offer》第二十九题(顺时针打印矩阵)
// 面试题29:顺时针打印矩阵 // 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. #include <iostream> void PrintMatrixInC ...
随机推荐
- python的ws库功能,实时获取服务器ws协议返回的数据
# -*- coding:utf-8 -*- ''' 模块下载,帮助地址:https://github.com/liris/websocket-client#readme 模块:websocket-c ...
- P2709 小B的询问(莫队)
P2709 小B的询问 莫队模板 资磁离线询问 维护两个跳来跳去的指针 先分块,蓝后询问按块排序. 蓝后每次指针左右横跳更新答案 #include<iostream> #include&l ...
- SVN更新无数次后仍显示Out of date
理器相集成的TortoiseSVN更是方便. 但有时候在提交修改后的文件时,却莫名其妙的出现out of date错误,导致工程无法commit,即使将新文件删了重新update,然后再在旧文件上作修 ...
- Differences Between Enterprise, Standard and Standard One Editions on Oracle 11.2 (Doc ID 1084132.1)
标准版不允许并行.分区.闪回.各种缓存等大数据量必须特性,如此限制,oracle摆明了只卖企业版,买标准版不如mysql(如果不熟悉postgresql的话). Oracle企业版1 CPU 20w起 ...
- c++ linux下输出中文
同样,使用的是VS FOR LINUX进行测试. converting to execution character set: Invalid or incomplete multibyte or w ...
- 使用mac自带终端修改hosts
修改mac host文件绑定域名 打开终端 在终端terminal中输入sudo vi/etc/hosts sudo与vi之间有一个空格 上一步输入完成之后按enter回车键,如果当前用户账号有密码, ...
- intel FPGA使用
https://www.altera.com/documentation/swn1503506366945.html https://files.cnblogs.com/files/shaohef/o ...
- shell实现自动部署两台tomcat项目+备份
就做个记录吧, 其实也没啥好说的. 主机 #!/bin/bash TODAY=$(date -d 'today' +%Y-%m-%d-%S) MIP="192.168.180.24" ...
- python简说(二十八)json.path
import jsonpathres = jsonpath.jsonpath(d,'$..name') 字典,模糊匹配
- 热扩容LVM形式的/(根)分区(无损增大、缩小LVM分区)
警告! 本文为虚拟机环境,生产环境请务必在操作前优先备份重要数据! 再有,请确保所需扩充的分区为非进程占用分区 实验背景:当时规划系统分区时/(根)目录分配过小 实验目的 : 无损增大/(根)分区容量 ...