題目連結:
給定一正整數 T (1 ≦ T ≦ 30),代表有 T 筆測試資料。每筆測試資料前有一空白列,接著得若干列才是測試資料的內容。每列的輸入是一個句子,句子由好幾個以空白隔開的單詞組成,每個單詞又各自是由大小寫的英文字母所組成。
每個句子隱藏著一段訊息,其解碼方式為:取第一個詞的第一個字母、第二個詞的第二個字母、……、第 i 個詞的第 i 個字母。但如果第 i 個詞不滿 i 個字母,則改成取第 i + 1 個詞的第 i 個字母(如果第 i + 1 個詞也不滿 i 個,則繼續順延直到滿足或是句子結束)。
對於每個句子,請輸出其隱藏訊息(一個句子輸出一列)。輸出格式請參見範例輸出。
2
Hey good lawyer
as I previously previewed
yam does a soup
First I give money to Teresa
after I inform dad of
your horrible soup
Case #1:
How
are
you
Case #2:
Fine
and
you
雖然 C++ 可以使用 getchar() 一個字元一個字元讀取。但是也可以使用 getline() 讀取一整列字串(直到碰到換行字元或 EOF (檔案結束))。
分別每個測試資料的依據就是讀到空白列或是 EOF 為止(但是給定數字 T 後面的空白列不計)。
接著就是用 getline() 讀取一整列的輸入字串,放到 stringstream 的字串串流後變成一個詞一個詞,就用題目的解碼方式解碼。即用一個計數的變數 N。如果讀到的詞不滿 N 個字母就順延,且 N 不加 1 ;反之,輸出第 N 個字母的內容,並將 N 加一。
然後每個句子處理完後換行。(記得測試資料的一開頭要先輸出這是第幾個 Case )
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。