欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

2020oop第一次7-1 说反话-加强版 (20分)

程序员文章站 2022-05-29 09:37:01
...

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

输入格式:

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

输出格式:

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

输入样例:

Hello World   Here I Come

输出样例:

Come I Here World Hello

最初代码(AC)


#include <stdio.h>
#include<string.h>
int main()
{
    char a[500001];
    gets(a);
    int i,l,j,word=0,flag=1;//flag是记录空格的,word是统计单词长度的
    l=strlen(a);//测量长度
    for(i=l-1;i>=0;i--)//倒序检查
    {     if(a[i]!=' ') word++;//开始统计单词长度
        else if(word!=0&&a[i]==' ')//遇到第一个空格单词结束
        {if(flag==1) flag=0;// 遇到多个空格的处理方法
        else printf(" ");
        for(j=i+1;j<=i+word;j++)
        printf("%c",a[j]);//开始一个一个输出单词
        word=0;
        }
    }if(word>0)//输出最后一个单词,主要是控制输出格式用的
    {
        if(flag==0) printf(" ");
        for(j=0;j<=word-1;j++)
        printf("%c",a[j]);
    }
    return 0;
}

后来的代码

#include<iostream>
#include<string.h>
using namespace std;
char a[500000];
int main(){
    gets(a);//string 输入时遇到空格、换行等空白输入就会停止,所以采用gets函数,但是在PTA上会有Warming提示
    int la=strlen(a),k=0;//k用来记录一个单词的长度 ,记得初始化
    
    for(int i=la-1;i>=0;i--)//说反话,那就反过来
    {
        if(a[i]!=' ')//不是空格时+1
            k++;
        else {
            if(a[i]==' '&&k!=0){//k!=0是用来筛除多个空格的情况
                for(int j=0;j<=k;j++)
                    cout<<a[i+1+j];
                k=0;
            }
        }
    }
    
    if(k>0){//别漏了第一单词前并没有空格的情况
        for(int i=0;i<k;i++)
            cout<<a[i]<<"*";
    }
    return 0;
}

相关标签: 2020