7-32 说反话-加强版(用Python/C++实现)

PAT基础练习集 说反话-加强版

题目描述:

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

**

输入格式

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

**

输出格式:

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

**

输入样例:

**

Hello World Here I Come

**

输出样例:

**
Come I Here World Hello

题目链接:PTA—说反话—加强版

用Python解题思路:

1.从给出的条件:用“空格”分割的单词,而我们知道cin和scanf都是不读入空格的,也就是读到空格就退出读入。还有一个条件就是以回车结束字符串的输入,那么’\n’就是退出循环的条件。而我们只要把每个单词都存入数组,然后倒着输出就好了
2.但是当我们使用C/C++做这题时,会发现如果在回车前有空格getchar()就读不到’\n’,这样程序就会一直运行,导致超时。(这个方法如果有方法也能写,不过麻烦)
3.这样一来就能想到用Python,因为Python有强大的处理字符串的能力,而且它的列表类型能存入许多字符串,并且可以简单地使用[::-1]将列表逆序
4.代码如下,7行解决。

#使用异常处理是因为如果只读入空格,列表中不会存,导致数组越界
try:		
    x = list(input().split())		#split()默认空格分隔(可以是多个)
    for i in x[:-len(x):-1]:		#循环到-len(x),控制输出
        print(i+" ",end="")
    print(x[0])
except IndexError:
    exit(0)

Python

用C++解题思路

很简单,先读入字符串,然后一个一个判断。
由于判断条件涉及到空格,我们就需要把首尾的空格去除,这里要用到:

    s.erase(0,s.find_first_not_of(" "));            //去除首尾空格
    s.erase(s.find_last_not_of(" ") + 1);

AC代码:

#include <iostream>
#include <string>
using namespace std;
int main()
{
	string s;
    int i,len,j;
    getline(cin,s);

    s.erase(0,s.find_first_not_of(" "));            //去除首尾空格
    s.erase(s.find_last_not_of(" ") + 1);

    if(s == "")                                    //若空,直接退出
    return 0;

    len = s.length();
    for(i=len-1;i>=0;i--)
    {
        if(s[i] == ' ' && s[i+1] != ' ' &&i<=len-2)
        {
            for(j=i+1;j<len && s[j]!=' ';j++)
            	cout<<s[j];
        	cout<<" ";
        }
    }
    for(i=0;s[i]!=' ';i++)
    cout<<s[i];
    return 0;
}

C++
欢迎在评论区留言,觉得好的话给作者第一篇文章点个赞吧,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值