閱讀以下說明和C函數(shù),填補(bǔ)C函數(shù)中的空缺(1)~(6),將解答寫在答題紙的對應(yīng)欄內(nèi)。
【說明】
函數(shù)numberOfwords(char message[])的功能是計算存儲在message字符數(shù)組中的一段英文語句中的單詞數(shù)目,輸出每個單詞(單詞長度超過20時僅輸出其前20個字母),并計算每個英文字母出現(xiàn)的次數(shù)(即頻數(shù)),字母計數(shù)時不區(qū)分大小寫。
假設(shè)英文語句中的單詞合乎規(guī)范(此處不考慮單詞的正確性),單詞不縮寫或省略,即不會出現(xiàn)類似don't形式的詞,單詞之后都為空格或標(biāo)點符號。
函數(shù)中判定單詞的規(guī)則是:
(1)一個英文字母串是單詞;
(2)一個數(shù)字串是單詞;
(3)表示名詞所有格的撇號(')與對應(yīng)的單詞看作是一個單詞。
除上述規(guī)則外,其他情況概不考慮。
例如,句子“The 1990's witnessed many changes in people's concepts of conservation.”中有10個單詞,輸出如下:
The
1990's
witnessed
many
changes
in
people's
concepts
of
conservation
函數(shù)numberOfwords中用到的部分標(biāo)準(zhǔn)庫函數(shù)如下表所述。
【C函數(shù)】
int numberOfwords (char message[])
{
char wordbuffer[21], i=0; /* i用作wordbuffer的下標(biāo) */
(1) pstr;
int ps[26]={0}; /* ps[0]用于表示字母'A'或'a'的頻數(shù) */
/* ps[1]用于表示字母'B'或'b'的頻數(shù),依此類推 */
int wordcounter=0;
pstr=message;
while (*pstr) {
if( (2) (*pstr)) {/* 調(diào)用函數(shù)判定是否為一個單詞的開頭字符 */
i=0;
do{/* 將一個單詞的字符逐個存入wordbuffer[],并進(jìn)行字母計數(shù) */
wordbuffer[i++]=*pstr;
if (isalpha (*pstr)) {
if( (3) (*pstr)) ps[*pstr-'a']++;
else ps[*pstr-'A']++;
}
(4) ; /* pstr指向下一字符 */
}while (i<20 && (isalnum(*pstr)||*pstr=='\''));
if (i>=20) /* 處理超長單詞(含名詞所有格形式) */
while (isalnum (*pstr)||*pstr=='\'') { pstr++; }
(5) ='\0'; /* 設(shè)置暫存在wordbuffer中的單詞結(jié)尾 */
wordcounter++; /* 單詞計數(shù) */
puts (wordbuffer); /* 輸出單詞 */
}
(6) ; /* pstr指向下一字符 */
}
return wordcounter;
}