閱讀以下說明和C函數,填補C函數中的空缺(1)~(6),將解答寫在答題紙的對應欄內。
【說明】
函數numberOfwords(char message[])的功能是計算存儲在message字符數組中的一段英文語句中的單詞數目,輸出每個單詞(單詞長度超過20時僅輸出其前20個字母),并計算每個英文字母出現的次數(即頻數),字母計數時不區(qū)分大小寫。
假設英文語句中的單詞合乎規(guī)范(此處不考慮單詞的正確性),單詞不縮寫或省略,即不會出現類似don't形式的詞,單詞之后都為空格或標點符號。
函數中判定單詞的規(guī)則是:
(1)一個英文字母串是單詞;
(2)一個數字串是單詞;
(3)表示名詞所有格的撇號(')與對應的單詞看作是一個單詞。
除上述規(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
函數numberOfwords中用到的部分標準庫函數如下表所述。
【C函數】
int numberOfwords (char message[])
{
char wordbuffer[21], i=0; /* i用作wordbuffer的下標 */
(1) pstr;
int ps[26]={0}; /* ps[0]用于表示字母'A'或'a'的頻數 */
/* ps[1]用于表示字母'B'或'b'的頻數,依此類推 */
int wordcounter=0;
pstr=message;
while (*pstr) {
if( (2) (*pstr)) {/* 調用函數判定是否為一個單詞的開頭字符 */
i=0;
do{/* 將一個單詞的字符逐個存入wordbuffer[],并進行字母計數 */
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'; /* 設置暫存在wordbuffer中的單詞結尾 */
wordcounter++; /* 單詞計數 */
puts (wordbuffer); /* 輸出單詞 */
}
(6) ; /* pstr指向下一字符 */
}
return wordcounter;
}