天天看點

[PTA]7-32 說反話-加強版

給定一句英語,要求你編寫程式,将句中所有單詞的順序颠倒輸出。

輸入格式:

測試輸入包含一個測試用例,在一行内給出總長度不超過500 000的字元串。字元串由若幹單詞和若幹空格組成,其中單詞是由英文字母(大小寫有區分)組成的字元串,單詞之間用若幹個空格分開。
           

輸出格式:

每個測試用例的輸出占一行,輸出倒序後的句子,并且保證單詞間隻有1個空格。
           

輸入樣例:

Hello World   Here I Come
結尾無空行
           

輸出樣例:

Come I Here World Hello
結尾無空行
           
  • 送出結果:
[PTA]7-32 說反話-加強版
  • 源碼:
#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;
}