华为机试HJ31:单词倒排

Posted 翟天保Steven

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为机试HJ31:单词倒排相关的知识,希望对你有一定的参考价值。

题目描述:

对字符串中的所有单词进行倒排。

说明:

1、构成单词的字符只有26个大写或小写英文字母;

2、非构成单词的字符均视为单词间隔符;

3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;

4、每个单词最长20个字母;

输入描述:

输入一行以空格来分隔的句子

输出描述:

输出句子的逆序

示例:

输入:

I am a student

输出:

student a am I

解题思路:

首先,定义一个临时字符串,遍历输入的字符串,将字母字符放入临时字符串temp,当遇到非字母字符时,temp放入容器中存储,并清空临时字符串,此时已经拿到一个单词,继续获取下一个单词;考虑到最后的非结尾符字符可能是字母,当遍历完后,将非空临时字符串存储的最后一个单词也要放入容器中;倒序输出容器中的string单词,完成。

测试代码:

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main()
{
    string s;
    getline(cin,s);
    vector<string> vs;
    string temp;
    for(int i=0;i<s.size();++i)
    {
        if((s[i]>='A'&&s[i]<='Z')||(s[i]>='a'&&s[i]<='z'))
        {
            temp+=s[i];
        }
        else{
            if(!temp.empty())
            {
                vs.push_back(temp);
                temp.clear();
            }
        }
    }
    if(!temp.empty())
    {
        vs.push_back(temp);
    }
    for(int i=vs.size()-1;i>=0;--i)
    {
        cout<<vs[i]<<" ";
    }
    return 0;
}

以上是关于华为机试HJ31:单词倒排的主要内容,如果未能解决你的问题,请参考以下文章

华为机试HJ27:查找兄弟单词

华为python机试题目:查找兄弟单词称砝码单词倒排购物单合并表记录

Java解 | #HJ31单词倒排#倒置字符串# I like beijing # beijing like I #

华为机试HJ1:字符串最后一个单词的长度

华为机试HJ13:句子逆序

华为机试HJ36:字符串加密