剑指offer--之翻转字符串
来源:互联网 发布:淘宝怎么找团队 编辑:程序博客网 时间:2024/06/16 23:28
遇到这样的一道题是说:输入的是一个英文的句子,要求翻转句子中的单词的顺序,但是单词内的字符的顺序却不能变。例如:输入“I am a student.”输出的则是“student.am I”。
解题思路:
遇到这样的问题,我们一般都是通过翻转来实现的。也就是第一步翻转是把字符串里面所有的字符进行翻转,也就是字符串的逆置。然后再把每个单词里面字符的顺序进行翻转,这样的话我们就可以改变单词的顺序而不改变每个单词字符的顺序。
第一次翻转:
第一次翻转也就是字符串的逆置,这就很简单。用两个指针,一个指针指向字符串的开始,后一个指针指向字符串后面’\0’的前面的位置,这样通过第三个变量就可以完成字符串的替换。
第二次翻转:
第二次翻转的目的是对第一次翻转结果中每一个字符串单词里字符的翻转。我们知道每个单词之间都隔着一个空格,这样我们遇到一个空格表示是一个单词这样进行翻转就可以了。
代码如下:
#include<iostream>using namespace std;char* reverse(char* pbegin,char* pend){ if(pbegin == NULL || pend == NULL) return NULL; while(pbegin < pend) { char tmp = *pbegin; *pbegin = *pend; *pend = tmp; pbegin++; pend--; }}char* reverse_sentence(char* str){ if(str == NULL) return NULL; char* begin = str; char* end = str; while(*end != '\0') { end++; } end--; //最后一次会走到'\0'的后面 reverse(begin,end); //翻转整个字符串 begin = end = str; //连个指针都从字符串开始处走 while(*begin != '\0') { if(*begin == ' ') { begin++; end++; } else if(*end == ' '|| *end == '\0') { reverse(begin,--end); begin = ++end; } else { end++; } } return str;}int main(){ char str[] = "I am a student."; cout<<reverse_sentence(str)<<" "<<endl; return 0;}
除了上面这种方法还有一种更加高效、简便的方法:
代码:
#include <iostream> #include <string> using namespace std; void reverseword(char *p) { if (!p||!*p) { return ; } string s; while(*p!=' '&&*p!='\0') { s+=*(p++); } if (*p) { reverseword(p+1); } cout<<s<<" "; } int main() { char a[]="I am a student."; reverseword(a); return 0; }
0 0
- 剑指offer--之翻转字符串
- 剑指Offer之 - 翻转单词顺序 VS 左旋转字符串
- 剑指offer--翻转单词VS左转字符串
- LintCode-剑指Offer-(53)翻转字符串
- [剑指offer]翻转句子 ; 左旋字符串
- 剑指offer之面试题42翻转单词顺序VS左旋转字符串
- 剑指Offer之翻转单词顺序
- 【剑指offer】之翻转单词顺序
- 剑指offer 42 - 翻转单词顺序 左旋转字符串
- 【剑指offer系列】 翻转单词 VS 左旋字符串___42
- 剑指Offer: 翻转单词顺序列、左旋转字符串
- 剑指offer 42. 翻转单词顺序VS左旋转字符串
- 字符串之翻转字符串
- 《剑指offer》像素翻转
- 剑指Offer算法实现之十六:翻转链表
- 剑指offer系列之四十四:翻转单词顺序
- 剑指offer之字符数组内容翻转问题
- 剑指offer系列之42:翻转单词序列
- java学习知识
- Java IO 的自述
- Eclipse(properties)插件:PropertyEditor在线安装
- 【编程】概念的理解 —— socket
- Android面试知识点分享
- 剑指offer--之翻转字符串
- Spring与HIbernate整合
- Android的输入系统(Linux)
- 多线程辅助类之CountDownLatch(三)
- Git简单命令
- HDU1789贪心
- Struts2中DTD文件的添加
- ES6代码转为ES5代码的在线转换工具
- Glide加载网络图片,显示之前的URL图片,换了URL图片还是没变的问题