W_Linkhh 2022-01-20 14:26 采纳率: 57.1%
浏览 40
已结题

PAT 【C语言】 说反话

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

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

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

输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
下面为我的代码


#include<stdio.h>
#include<string.h>
main()
{
    char s[500001];
    int  a[500001];
    memset(s,0,sizeof(s));
    memset(a,0,sizeof(a));
    gets(s);
    int n;
    for(int i=0;s[i]!=0;i++)
    {
        a[i]=(int)s[i];
        n++;
    }
    int m=0;
    int b[500001];
    memset(b,0,sizeof(b));
    for(int i=0;i<n;i++)
    {
        if(a[i]>='A'&&a[i]<='Z')
        {
            b[m]=i;
            m++;
        }
    }
    for(int i=m-1;i>=0;i--)
    {
        for(int j=b[i];a[j]!=' '&&a[j]!=0;j++)
        {
            printf("%c",s[j]);
        }
        if(i!=0)
        {
        printf(" ");
        }
    }
}

img


最后这个不懂是什么意思

  • 写回答

3条回答 默认 最新

  • wzcwzcwzcwzcwzcwcz 2022-01-20 15:07
    关注

    单词之间用若干个空格分开。
    连续大写字母是一个单词的情况就不行了
    在你的代码基础上改了一下

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        char s[500001];
        int  a[500001];
        memset(s,0,sizeof(s));
        memset(a,0,sizeof(a));
        gets(s);
        int n;
        for(int i=0;s[i]!=0;i++)
        {
            a[i]=(int)s[i];
            n++;
        }
        int m=1;
        int b[500001];
        memset(b,0,sizeof(b));
        for(int i=0;i<n;i++)
        {
            if(a[i]==' ')
            {
                b[m]=i;
                m++;
            }
        }
        b[m]=n;
        for(int i=m-1;i>0;i--)
        {
            for(int j=b[i]+1;j<b[i+1];j++)
            {
                printf("%c",s[j]);
            }
            if(i!=0)
            {
            printf(" ");
            }
        }
        for(int j=b[0];j<b[1];j++){
            printf("%c",s[j]);
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月28日
  • 已采纳回答 1月20日
  • 创建了问题 1月20日