题意:
方法一:
模拟
思路:直接模拟。
遍历字符串,将单词提取出来。
最后逆向输出单词。
#include <bits/stdc++.h>
using namespace std;
int main(){
string s;
getline(cin,s);
int len=s.size();
vector<string> v;
string x="";
for(int i=0;i<len;i++){//遍历
if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')){//如果是字母,则组成单词
x+=s[i];
}else{//否则,如果x非空,则收集一个单词
if(x!=""){
v.push_back(x);
x="";
}
}
}
if(x!=""){
v.push_back(x);
x="";
}
for(int i=v.size()-1;i>=0;i--){//逆向输出
cout << v[i] << " ";
}
return 0;
}
时间复杂度:
空间复杂度:![]()
方法二:
stringstream类
思路:stringstream可以分割以空格作为分隔符的字符串。因此,可以先将非字母的字符变为空格,然后利用stringstream分割字符串。
#include <bits/stdc++.h>
using namespace std;
int main(){
string s;
getline(cin,s);
int len=s.size();
for(int i=0;i<len;i++){//将非字母的字符变为空格
if(!isalpha(s[i]))
s[i]=' ';
}
vector<string> v;//单词数组
stringstream ss(s);//stringstream可以分割以空格作为分隔符的字符串
string x;
while(ss >> x){
v.push_back(x);
}
for(int i=v.size()-1;i>=0;i--){//逆向输出
cout << v[i] << " ";
}
return 0;
}
时间复杂度:
空间复杂度:![]()



京公网安备 11010502036488号