剑指offer 面试题42 翻转单词顺序
来源:互联网 发布:android tomcat mysql 编辑:程序博客网 时间:2024/05/10 19:12
题目:
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.例如输入字符串”I am a student.”,则输出”student. a am I”.
解题思路:
先对整个字符串从头到尾翻转一次,然后再重头扫描.遇到空格或者到达末尾,就再翻转一次.
总结:
1.字符串string,使用empty判断是否为空
2.c类型的字符串 char *str,使用 *str==’\0’,判断是否到达末尾.c++类型字符串string,不能使用str[str.length()],会被判定为越界行为;只能够使用length()本身判定是否到达末尾.
3.在机子测试时,写了两种代码.这里先假设函数参数是 char 类型,不是string类型,因为我原来是按照char 做的.
第一种情况
char *p="I am a student."; char *new_str=ReverseSentence(p);
报错:段错误,segmentation fault.
第二种情况:
char p[]= {'I',' ','a','m',' ','a',' ','s','t','u','d','e','n','t','.','\0'} char *new_str=ReverSentence(p);
顺利运行.
很疑惑,去查了一下资料,发现问题.
(1)先说明char []和char *区别.
char str1[]=”aaa”;
char str2[]=”aaa”;
使用char[]赋值,编译器会直接开辟空间,然后把字符串复制进去.
上面的str1和str2指向的地址不同.
char *str1=”bbb”;
char *str2=”bbb”;
使用char*会使指针指向全局字符串常量,上面就是指指向”bbb”这个常量
上面的str1和str2指向的地址是相同的
(2)由于是字符串常量,类型是const char* const,意思是指针和指针指向的值都是不可以改变的.只能访问.
(3)所以,不要想着对char str里面的值进行改变.通常我们使用char ,都是用于指向已经存在的指针,我们只是想拷贝多一份用于操作.要想char字符串中的值能够改变,就只能把它开在堆或者栈中
栈:char[]
堆:new
下面是算法代码
void Reverse(std::string& str,int left,int right){ if(str.empty() || right<left){ return; } for(;left<right;left++,right--){ char temp=str[left]; str[left]=str[right]; str[right]=temp; }}std::string ReverseSentence(std::string str) { if(str.empty()){ return ""; } int length=str.length()-1; Reverse(str,0,length); int left=0; int right=0; while(left<length+1){ if(str[right]==' ' || right==length+1){ Reverse(str,left,right-1); right++; left=right; }else{ right++; } } return str;}
- 《剑指Offer》面试题:翻转单词顺序
- 剑指Offer----面试题42(1):翻转单词顺序
- 剑指offer 面试题42 翻转单词顺序
- (剑指Offer)面试题45:翻转单词顺序列
- 【剑指offer】面试题58(1):翻转单词顺序
- 剑指offer面试题42翻转单词顺序VS左旋字符串
- [剑指offer][面试题42]翻转单词顺序 VS 左旋转字符串
- 【剑指offer】面试题42:单词翻转顺序&左右旋转字符串
- [剑指offer]面试题42:翻转单词顺序,左旋转字符串
- 剑指offer 面试题42 翻转单词顺序 | 左旋转字符串
- 剑指offer 面试题42—翻转单词顺序VS左旋转字符串
- 《剑指Offer》学习笔记--面试题42:翻转单词顺序VS坐旋转字符串
- 【剑指Offer学习】【面试题42:翻转单词顺序vs左旋转字符串】
- 剑指offer-面试题42:翻转单词顺序VS左旋转字符串
- 剑指offer之面试题42翻转单词顺序VS左旋转字符串
- 剑指Offer面试题42:翻转单词顺序;左旋转字符串 Java实现
- 剑指offer--面试题42:翻转单词顺序列 vs 左旋转字符串
- 剑指offer——面试题42:翻转单词顺序VS左旋转字符串
- VLC搭建RTSP服务器和客户端的测试过程
- 谷歌求职记:我花了八个月准备谷歌面试
- 网站渗透思路全方面总结(针对新手思路介绍)
- android新特性:商城首页一键回到顶部功能实现(包括ListView, RecyclerView 和 ScrollView)
- Linux基本命令-目录结构及文件基本操作
- 剑指offer 面试题42 翻转单词顺序
- JAVASE学习(16)线程
- C++ 开发的第一款游戏
- Spring boot对hibernate建表(mysql)
- EXCEL_01
- linux下jdk的安装
- Atitit GRASP(General Responsibility Assignment Software Patterns),中文名称为“通用职责分配软件模式”
- 一个图片切换功能
- HDU-1010(DFS+奇偶剪枝)