題目描述:
給定由若干個單詞組成的字串,字串的長度小於 500,單詞和單詞之間由空格分開,求出其中的最長最短單詞輸入描述:
長度小於 500 的字串輸出描述:
輸出為 2 行,每行乙個單詞,第一行輸出最長單詞,第二行輸出最短單詞,若有多個相同長度的最長最短單詞,則輸出第一次出現的那個樣例輸入:
i play the leading man who else樣例輸出:
leading簡單的字串處理。這道題可以和 求字串個數 那道題一起思考一下,因為這道題也涉及到如何判斷單詞的分界線的問題。i
思路很簡單,從頭到尾掃瞄字串,用另外乙個string變數儲存單詞,碰到空格了就計算這個變數的長度,然後和max和min對比,更新資料就可以了。
下面解題部分會詳細講解**。
變數解釋:
我們看到**。首先讀取字串,做一些初始化。接下來我們看迴圈的開始點並不是常規的i=0,而是(str[0]==' ')?1:0
,為什麼呢。我們看下面,我們判斷乙個單詞是否結束的時候,用了str[i]==' ' && str[i-1]!=' '
,但是要注意的是,如果第乙個就是空格,那我們就會訪問i-1,也就是-1,這個時候就越界了。所以當第乙個字元是空格的時候,我們就從1開始。
如果乙個單詞沒結束(沒碰到空格),我們就把現在的這個字元追加到temps的尾部,直到單詞結束為止,那麼temps裡就存著這個單詞了。
如果乙個單詞結束了,就統計它(temps)的長度,分別和maxsl和minsl比較,如果比他們大/小,就改變maxsl和maxs/minsl和mins的值。然後清空temps的內容,好讓它繼續工作。
最後輸出maxs和mins的值就行了。
這裡用maxsl和minsl的作用其實也是優化,讓**不重複求maxs和mins的length。
// tsoj-1020 最長最短單詞
#include
#include
using
namespace std;
#define max_int 2147483647
intmain()
if(tempsltemps.
clear()
;}else
if(str[i]
!=' ')}
cout<}return0;
}
TSOJ課程 02 1037 整數求和
題目描述 求出 n 個整數的和。輸入描述 第一行為乙個正整數 n 1 n 1000 接下來 n 行每行乙個整數。輸出描述 乙個正整數,為所有給定數的和。樣例輸入 412 34樣例輸出 仍然是非常簡單的入門題,非常非常簡單的求和。不過這道題目繼承了tsoj課程題的優良傳統,就是輸入描述說的好像是單組一...
TSOJ課程 03 1045 奇數求和
題目描述 給定10個正整數,每個正整數均小於10000,將其中的奇數求和並輸出 輸入描述 輸入為一行,包含10個正整數 輸出描述 輸出為一行,為輸入的正整數中所有奇數的和 樣例輸入 1 2 3 4 5 6 7 8 9 10 樣例輸出 和之前那題幾乎一模一樣的題目,也是水題乙個。這種對資料不需要什麼處...
TSOJ課程 18 1136 高精度乘法
題目描述 給出兩個長度小於100位的正整數,求其乘積。輸入描述 兩行,一行乙個數。輸出描述 一行,為所求乘積。樣例輸入 1937 2931 樣例輸出 又是高精度。其實高精度的加法減法和乘法都大同小異,都是通過模仿手算的方式去實現的。但是乘法的手算如果模擬起來會顯得比較麻煩,所以我們要稍微加強一下。我...