PTA7-26 單詞長度(15 分)通俗解法
阿新 • • 發佈:2019-01-01
你的程式要讀入一行文字,其中以空格分隔為若干個單詞,以.結束。你要輸出每個單詞的長度。這裡的單詞與語言無關,可以包括各種符號,比如it's算一個單詞,長度為4。注意,行中可能出現連續的空格;最後的.不計算在內。
輸入格式:
輸入在一行中給出一行文字,以.結束
提示:用scanf("%c",...);來讀入一個字元,直到讀到.為止。
輸出格式:
在一行中輸出這行文字對應的單詞的長度,每個長度之間以空格隔開,行末沒有最後的空格。
輸入樣例:
It's great to see you here.
輸出樣例:
輸入格式:
輸入在一行中給出一行文字,以.結束
提示:用scanf("%c",...);來讀入一個字元,直到讀到.為止。
輸出格式:
在一行中輸出這行文字對應的單詞的長度,每個長度之間以空格隔開,行末沒有最後的空格。
輸入樣例:
It's great to see you here.
輸出樣例:
4 5 2 3 3 4
此題雖然是15分,但是我認為20分的水準可以有了,原因在於要考慮的情況比較多,處理起來難。本人第一次提交的時候,5個點,只過了3個,經檢查發現。這兩個點考察得不太符合常規,一個點是輸入只有“.”的時候,雖然沒有單詞,但是你不能輸出0,你除了輸出換行其他什麼都不能輸出。第二個點是“.”前有空格的情況,沒錯,按道理講一行文字以“.”結束,“.”前怎麼能有空格?我想大概是“.”前有空格的情況才是本題的難點,作者為了提高難度,就加上了這個測試點,結果使本人處理了很長時間也沒處理好,於是結合網上答案,寫出如下通俗演算法,並附詳細註釋:
#include<iostream> using namespace std; int main() { string s; int cnt_ch=0;//統計字元個數 int cnt_sp=0;//統計空格個數 getline(cin,s); int len=s.length(); for(int i=0;i<len-1;i++)//從第一個字元到倒數第二個字元 { if(s[i]!=' ')//如果當前字元不為空格 { if(cnt_sp&&cnt_ch)//如果當前字元前面有空格且空格前有單詞 //即存在當前單詞的上一個單詞 { cout<<cnt_ch<<' ';//輸出上一個單詞長度和空格 cnt_ch=0;//字元個數清0,重新計算 }//執行完後直到下一個單詞即將判定才執行此分支 cnt_ch++;//字元個數自增,將當前字元算進去 cnt_sp=0;//空格個數清0 } else//如果當前字元為空格 cnt_sp++;//空格個數自增 } if(cnt_ch)//如果字元個數不為0 cout<<cnt_ch;//輸出最後一個單詞的長度 return 0; }