reverse words in a sentence
2015-10-11 21:11
246 查看
题目要求反转句子中每个单词的顺序,单词简单的以空格分隔
input
How are you?
output
you? are How
想到的测试用例
1. 首位有空格,目前结果中,首位也会有空格
2. 连续空格的情况,目前结果也会有连续空格
3. 单词只有一个字母
4. 输入为空串
解题思路
两次反转,第一次反转整句话,第二次反转每个单词
代码
题目要求反转句子中每个单词的顺序,单词简单的以空格分隔
input
How are you?
output
you? are How
想到的测试用例
1. 首位有空格,目前结果中,首位也会有空格
2. 连续空格的情况,目前结果也会有连续空格
3. 单词只有一个字母
4. 输入为空串
解题思路
两次反转,第一次反转整句话,第二次反转每个单词
代码
void reverse_word(char a[]) { if (a == NULL) return; // 这个必须写,否则strlen遇到空指针会crash int n = strlen(a); if (n == 0) return; //这个可以不写,因为为0时,后面的循环都不会进入,但是写上更安全清晰,不容易出错 for (int i = 0, j = n-1; i<j; i++, j--) { char temp=a[i]; a[i]=a[j]; a[j]=temp; } int start = 0, end = 0; while (end < n) { // 这里必须使用位置判断,而非检查a[end],因为内循环定位后 // 出大循环前,end又加了1,移动到字符串后面去了 // 这里,不知道有没有更方便记忆的,直白的写法 while (a[end] && a[end] != ' ') end++; // 一定要双重判断,否则会越界。可以使用end<n代替,感觉更直观 for (int i=start, j=end-1; i<j; i++, j--) { char temp=a[i]; a[i]=a[j]; a[j]=temp; } start = ++end; } }
相关文章推荐
- 只有程序员看的懂的面试圣经|如何拿下编程面试
- 下一次技术面试时要问的 3 个重要问题
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- PHP程序员面试 切忌急功近利(更需要注重以后的发展)
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析