题目描述:
对字符串中的所有单词进行倒排。
说明:
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; }