0

記事から単語の頻度を数えたい。

私の考えは、最初に構造体配列を作成することです

 struct{
       char[WORD_SIZE]
 }data[MAX_WORD_NUMBER];

次に、各文字を読み取り、次のように決定します。

isalpha();

次に小文字に変換します

tolower();

次に、各構造体に単語を格納します。

次に、すべての単語に対して失敗関数を作成します。

次に、それを呼び出すことによって各単語をテストします。

1.しかし、繰り返しが原因で頻度を数える方法がわかりません。

(単語を読んだり挿入したりするたびに比較できると思いましたが、効果がないので、もっと効率的な方法はありますか?)

2.メソッド呼び出し関数が多すぎると思います。

KMPをより効果的に使用するにはどうすればよいですか?

4

2 に答える 2

3

CまたはC++でプログラミングしていますか?質問に両方のタグを付けました。

std::mapあなたがC++を使用していると仮定すると、あなたはあなたの単語を数えるためにはるかにうまくいくでしょう。このようなもの

#include <map>
#include <string>

std::map<std::string, int> data;

std::string word;

data[word] = 0; // set word count to zero
data[word]++; // increment word count

// print out all the word counts
for (std::map<std::string, int>::iterator i = data.begin();
  i != data.end(); ++i)
{
  cout << "word " << i->first << " occurs " << i->second << "times\n";
}

仕事に適したツールを選択すれば、このタスクは非常に簡単になります。もちろん、Cでプログラミングしている場合は、これは役に立ちません。

于 2012-10-20T11:04:15.500 に答える
1

Cでこれを行う場合は、次のように構造を拡張します。

struct {
    char[WORD_SIZE];
    int count;
} data[MAX_WORD_NUMBER];

そして、この構造体の配列に新しい単語を格納するときはいつでも、それぞれcountを0に設定します。

次に、単語がすでに配列に含まれていることがわかった場合は、それぞれをインクリメントしますcount

プログラムの最後に、カウントを出力します。

于 2012-10-20T11:17:17.723 に答える