题目描述
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
//////////////////////////////////////////////
接口说明
/*
反转句子
@param sentence 原句子
@return 反转后的句子
*/
public String reverse(String sentence);
输入描述
将一个英文语句以单词为单位逆序排放。
输出描述
得到逆序的句子.
输入
I am a boy
输出
boy a am I
思路
直接依靠空格进行识别分割字符串的方法理论上是可行的,但是过于繁琐,不妨换一种思路,将空格直接改为 ‘\0’ (字符串结束标志)。可以理解为在内存中将一个字符串分割成了多个小字符串。
改成 ‘\0’ 的方法很秀,源自soeben大佬的笔下,文末有贴上出处。
1、搭建函数框架
2、倒序遍历字符串(从尾到头)
3、遇到空格之后将其改为 ‘\0’ 。
4、利用sstream中的ostringstream串接逆序字符串,作为函数处理结果输出。
#include <iostream>
#include <cstring>
#include <sstream>
using namespace std;
ostringstream kkk;
//字符串逆序模块函数
string reverse(string str){
for(int i=str.length()-1;i>=0;i--){
if(str[i]==' '){
str[i]='\0'; //将空格改为 ‘\0’
kkk<<&str[i+1]<<' '; //合并倒序的字符串
/*
“&”在这里的作用是取这个地址存储的内容,不加“&”的话只能
得到单个字符。
这里的 ostringstream 定义的 kkk 可以类比于 cout
*/
}
}
kkk<<&str[0];
return kkk.str(); //用 .str() 返回串接好的字符串
}
int main(){
string str;
getline(cin,str);
cout<<reverse(str)<<endl;
}
参考链接:
改成 ‘\0’ 的做法出处(非模块化)
来源:CSDN
作者:KCBB
链接:https://blog.csdn.net/qq_35423344/article/details/104637636