HJ13句子逆序
一.题目描述
给出一句英语语句以单词为单位,所以单词之间用空格隔开,除了英文单词以外不含有其他的字符,将单词逆序排放后输出。
二.算法(循环输入流)
首先我们要认识到反转的不是字母,是单词的反转。我们可以利用循环输入流每次读入一个单个单词,造成可以读入一个单个的单词的原因就是cin输入流在读入一个空格时候会自动断开,所以利用循环输入流处理可以帮助我们每次读入一个单个的单词,然后将每一个单个单词加到需要返回的字符串的前面即可,下面是完整代码:
#include<bits/stdc++.h>
using namespace std;
int main() {
string s,str="";
while(cin>>s) {//循环输入流 ctrl+z表示最后输入结束
s+= " " +str;
str=s;
}
cout <<str<< endl;
return 0;
}
时间复杂度: 需要去读入字符串
空间复杂度: 需要开辟空间返回最后的字符串
三.算法(模拟)
我们可以一次性读入整个一句英语语句,然后利用整个字符串的空格的进行分割存入入每一个单词,然后将所有的单词反转后输出,下面是完整的代码:
#include<bits/stdc++.h>
using namespace std;
int main() {
vector<string>q;
string s;
getline(cin, s);
string str="";
for(int i=0;i<s.size();i++){
if(s[i]!=' '){//不是空格就记录下每一个字符
str+=s[i];
} else {
//是空格则说明是一个单词已经记录了 需要放入vector中了
q.push_back(str);
str="";
}
}
q.push_back(str);//细节注意一下 最后一个单词要在循环外填入
for(int i=q.size()-1;i>=0;i--){//可以将所有的单词倒序输出即可
if(i!=q.size()-1){
cout<<" "<<q[i];
} else {
cout<<q[i];
}
}
cout<<endl;
return 0;
}
时间复杂度: 需要去读入字符串
空间复杂度: 需要开辟空间返回最后的字符串