C語言 (七)說反話加強版

2021-09-19 04:32:11 字數 1430 閱讀 3028

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

輸入格式:

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

輸出格式:

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

輸入樣例:

hello world   here i come
輸出樣例:

come i here world hello
分析:

輸入字串arr(包含所有空格),然後逆序判斷,

輸出單詞的條件有三種:

代表乙個單詞斷句

輸出當前和後邊的字母

輸出第乙個字母

#include#includeint main ()

len=i;

//printf("%d\n\n",len);

for(i=len-1;i>=0;i--)

if((i==0)&&arr[i+1]!=' '&&arr[i]!=' ')//a+a 第乙個a為頭

if((i==0)&&arr[i+1]==' '&&arr[i]!=' ')//a+0 第乙個a為頭

if(arr[i]!=' '&&arr[i+1]==' ')//a+空格

if(arr[i]!=' '&&arr[i+1]!=' ')//a+a

if((arr[i]==' '&&arr[i+1]==' ')||(arr[i]==' '&&arr[i+1]=='\0'))//空格+空格

} return 0;

}

在這裡發現空格和'\0'的對待是不同的,我用的getchar存的輸入字串到char型陣列,記錄字串長度等於所有字元個數(包括所有空格),,然後發現 程式自動把最後乙個空格當做'\0'作為結束符,判斷的時候『 』和『\0』待遇不同

輸入:i.love..you....      (len=15)

除錯時發現這個空格是在判斷i=14(倒數第二個空格)時輸出的,即在末尾 arr[14]=空格 而arr[15]='\0',

以至於做下面這個判斷時

if(arr[i]==' '&&arr[i+1]!=' '&&arr[i+1]!='\0')//空格+a
程式以為 ' '+'\0'也是空格+a的形式 ,cnt=0,直接輸出乙個空格

修改此條件 為下面這樣就可以了

if(arr[i]==' '&&arr[i+1]!=' '&&arr[i+1]!='\0')//空格+a

說反話 加強版

給定一句英語,要求你編寫程式,將句中所有單詞的順序顛倒輸出。測試輸入包含乙個測試用例,在一行內給出總長度不超過500 000的字串。字串由若干單詞和若干空格組成,其中單詞是由英文本母 大小寫有區分 組成的字串,單詞之間用若干個空格分開。每個測試用例的輸出佔一行,輸出倒序後的句子,並且保證單詞間只有1...

32 說反話 加強版

給定一句英語,要求你編寫程式,將句中所有單詞的順序顛倒輸出。測試輸入包含乙個測試用例,在一行內給出總長度不超過500 000的字串。字串由若干單詞和若干空格組成,其中單詞是由英文本母 大小寫有區分 組成的字串,單詞之間用若干個空格分開。每個測試用例的輸出佔一行,輸出倒序後的句子,並且保證單詞間只有1...

PTA 說反話 加強版

給定一句英語,要求你編寫程式,將句中所有單詞的順序顛倒輸出。測試輸入包含乙個測試用例,在一行內給出總長度不超過500 000的字串。字串由若干單詞和若干空格組成,其中單詞是由英文本母 大小寫有區分 組成的字串,單詞之間用若干個空格分開。每個測試用例的輸出佔一行,輸出倒序後的句子,並且保證單詞間只有1...