PTA-说反话-加强版

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:

测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。

输出格式:

每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。

输入样例:

Hello World Here I Come

输出样例:

Come I Here World Hello

思路

一开始用string s,while(cin >> s) 做的,5行代码只拿了19分,差一分,全为空格的情况没有处理。然后就只能推倒重来了,先读完在后再扫描,判断空格,每读完一个就push一个,但是最后一个会漏掉,要特判一下。更多细节看代码。

实现

#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#include<stack>
#include<map>
#include<cmath>

using namespace std;

#define rep(i,m,n) for(int i=m;i<n;i++)
#define rep1(i,m,n) for(int i=m;i>=n;i--)
#define pb  push_back


int main(){
    string s,s1="",s2="";
    getline(cin,s);
    vector<string> res;
    rep(i,0,s.length()){
        char c = s[i];
        if(c!=' ')s1 += c;
        else {
        	if(s1.length()>0){
        		res.pb(s1);s1.clear();
			}
        }
    }
    // 最后一个会漏掉,但是要判断一下
	if(s1.length()>0) res.pb(s1);  
    if(res.size()) cout <<  res[res.size()-1];
	rep1(i,res.size()-2,0) cout << " " << res[i] ;
    return 0;
}

/* 如下代码可轻松拿下19分,不过想拿剩下的一分,代码就没有这么简洁了
int main(){
    string s;
    vector<string> v;
    while(cin >> s) v.pb(s); 
	cout <<  v[v.size()-1];
	rep1(i,v.size()-2,0) cout << " " << v[i] ;
	return 0;
}*/

发布了63 篇原创文章 · 获赞 34 · 访问量 6570

猜你喜欢

转载自blog.csdn.net/SinclairWang/article/details/103092725
今日推荐