[PTA]7-32 说反话-加强版

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

输入格式:

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

输出格式:

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

输入样例:

Hello World   Here I Come
结尾无空行

输出样例:

Come I Here World Hello
结尾无空行
  • 提交结果:

在这里插入图片描述

  • 源码:
#include<stdio.h>
#include<string.h>

int main()
{
    
    
    char word[500001];
    int  tail = -1, head = -1;                  // tail和head一前一后确定每个单词
    int isPrintBlank = 1;                       // isPrintBlank判断是否需要输出空格

    gets(word);

    for (int i = strlen(word) - 1; i >= 0; i--) // 倒序依次输出每个单词
    {
    
    
        if (word[i] != ' ' && tail < 0)         // 单词尾
        {
    
    
            tail = i;
        }

        if ((word[i] != ' ' && word[i - 1] == ' ') || (i == 0) && tail >= 0) // 单词头
        {
    
    
            head = i;
        }

        if (head >= 0 && tail >= 0)             // 输出当前单词
        {
    
    
            if (isPrintBlank != 1)
            {
    
    
                putchar(' ');
            }

            for (head; head <= tail; head++)
            {
    
    
                printf("%c", word[head]);
            }

            isPrintBlank = 0;
            tail = -1;
            head = -1;
        }
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_51008866/article/details/120224876