[C/C++] 演算法提高 不同單詞個數統計
阿新 • • 發佈:2019-02-12
問題描述
編寫一個程式,輸入一個句子,然後統計出這個句子當中不同的單詞個數。例如:對於句子“one little two little three little boys”,總共有5個不同的單詞:one, little, two, three, boys。
說明:
(1)由於句子當中包含有空格,所以應該用gets函式來輸入這個句子;
(2)輸入的句子當中只包含英文字元和空格,單詞之間用一個空格隔開;
(3)不用考慮單詞的大小寫,假設輸入的都是小寫字元;
(4)句子長度不超過100個字元。
輸入格式:輸入只有一行,即一個英文句子。
輸出格式:輸出只有一行,是一個整數,表示句子中不同單詞的個數。
輸入輸出樣例
樣例輸入
one little two little three little boys
樣例輸出
5
思路:
1. 定義一個字元陣列char sen[100]
,用gets
輸入句子;
2. 對這個句子按照空格
或\0
標誌,分解出每個單詞;
3. 每次得到一個單詞,放到一個變數temp
,用temp
都去word
陣列找:如果word
數組裡面沒有這個單詞,就把單詞放進去,同時有個記錄單詞個數的變數nword
;如果word
陣列有這個單詞,就什麼都不用做,繼續獲取下一個單詞;
4. 最後就能輸出單詞個數nword
。
技巧:
用C++的String變數會方便很多,比如比較字串,可以直接用==
運算子判斷,可以用=
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main ()
{
char sen[100];
gets(sen); // 輸入的句子
string word[100]; // 存放單詞的陣列,每個單詞都不重複
string temp; // 用來存放分解出來的單詞
int nword = 0; // 記錄單詞個數
int len = strlen(sen); // 句子總長度
for (int i = 0; i <= len; ++i)
{
if (sen[i] == ' ' || sen[i] == '\0')
{
int j;
for (j = 0; j < nword; ++j)
if (word[j] == temp)
break;
// 不在word數組裡面,就把詞加入數組裡,然後單詞的個數nword+1
if (j == nword)
word[nword++] = temp;
temp.clear(); // 清除temp的字元,準備存放下一個單詞。
}
else
temp += sen[i];
}
cout << nword << endl;
return 0;
}