TSOJ課程 07 1020 最長最短單詞

2021-09-13 16:08:45 字數 1305 閱讀 9092

題目描述:

給定由若干個單詞組成的字串,字串的長度小於 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 樣例輸出 又是高精度。其實高精度的加法減法和乘法都大同小異,都是通過模仿手算的方式去實現的。但是乘法的手算如果模擬起來會顯得比較麻煩,所以我們要稍微加強一下。我...