C++_句子逆序_华为上机笔试

有些话、适合烂在心里 提交于 2020-03-04 06:19:42

题目描述

将一个英文语句以单词为单位逆序排放。例如“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’ 的做法出处(非模块化)

ostringstream以及其他sstream库常用操作的食用方法

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!