华为机试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:单词倒排的主要内容,如果未能解决你的问题,请参考以下文章
华为python机试题目:查找兄弟单词称砝码单词倒排购物单合并表记录