单词倒排

来源:互联网 发布:淘宝导航css代码 html 编辑:程序博客网 时间:2024/05/17 07:57

题目描述

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

说明:

1、每个单词是以26个大写或小写英文字母构成;

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

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

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


输入描述:

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



输出描述:

输出句子的逆序


输入例子:
I am a student

输出例子:

student a am I

//题目标题://将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”。//所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符。#include<iostream>#include<string>#include<vector>using namespace std;string SentenceReverse(string str){vector<string> vec;string res;for (int i = 0; i < str.size();){string tmp;while (i<str.size() && str[i] == ' ')i++;while (i < str.size() && str[i] != ' '){int count = 0;while (i<str.size() && str[i] == '-'){count++;i++;}if (count >= 2){i--;break;}if (!((str[i] >= 'a'&&str[i] <= 'z') || (str[i] >= 'A'&&str[i] <= 'Z')))    break;tmp.push_back(str[i]);i++;}        if(!tmp.empty())    //必须有这一步vec.push_back(tmp);i++;}for (int i = vec.size() - 1; i >= 0; i--){res += vec[i];if (i>0)res.push_back(' ');}return res;}int main(){string str1;while (getline(cin, str1)){cout << SentenceReverse(str1);        cout<<endl;}return 0;}


0 0