1. 程式人生 > >[C/C++] 演算法提高 不同單詞個數統計

[C/C++] 演算法提高 不同單詞個數統計


問題描述
  編寫一個程式,輸入一個句子,然後統計出這個句子當中不同的單詞個數。例如:對於句子“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; }