天天看點

PAT乙級*1009 說反話 (20分) 用fgets輸入

1009 說反話 (20分)

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

輸入格式:

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

輸出格式:

每個測試用例的輸出占一行,輸出倒序後的句子。

輸入樣例:

Hello World Here I Come

輸出樣例:

Come I Here World Hello

09 說反話 (20分)**

給定一句英語,要求你編寫程式,将句中所有單詞的順序颠倒輸出。**輸入格式:**測試輸入包含一個測試用例,在一行内給出總長度不超過 80 的字元串。字元串由若幹單詞和若幹空格組成,其中單詞是由英文字母(大小寫有區分)組成的字元串,單詞之間用 1 個空格分開,輸入保證句子末尾沒有多餘的空格。**輸出格式:**每個測試用例的輸出占一行,輸出倒序後的句子。

輸入樣例:

Hello World Here I Come

輸出樣例:

Come I Here World Hello

解題思路:

**

從後往前讀入,讀到空格,把空格後面的單詞輸出

PAT不能用gets(),可以用fgets()代替gets()

fgets的用法:

fgets函數的調用形式如下:fgets(str,n,fp);

  1. 同樣是輸入123

    gets隻有一次換行,這是因為程式的語句printf(“%s\n”,str)

    fgets有兩次,而第二次是其本身把回車換行符存入了字元串裡

    是以,gets的長度隻有3和輸入的字元串長度一樣,fgets是4,多出來的是回車換行符。

  2. fp是檔案指針。stdin,表示輸入流,指從鍵盤輸入,
#include<bits/stdc++.h>  //萬能頭檔案
using namespace std;
char s[86];

int main(){
    fgets(s,82,stdin);
    int len,i;
    len=strlen(s);
    s[len-1]='\0';//fgets有兩次,而第二次是其本身把回車換行符存入了字元串裡。
    //手動将\n位置處的值變為\0,代表輸入的結束。
    for(i=len-1;i>0;i--){
        if(s[i]==' ') { 
            printf("%s",&s[i+1]);//用取位址符,取到'\0'
            printf("%c",s[i]);//輸出空格
            s[i]='\0';//手動将最後的位置變為'\0'
        }

    }
    if(i==0) printf("%s\n",s);

    return 0;
}