题意:
方法一:
模拟
思路:直接模拟。
遍历字符串,将单词提取出来。
最后逆向输出单词。
#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; }
时间复杂度:空间复杂度: