4

私は、テキストにハフマン コードを実装する学校のプロジェクトに取り組んでいます。もちろん、最初の部分では、テキストの頻度分析が必要です。巨大なスイッチとカウンターの配列以外に、それを行うためのより良い方法はありますか?

すなわち:

int[] counters

for(int i = 0; i <inString.length(); i++)
{
switch(inString[i])
    case 'A':
    counters[0]++;
.
.
. 

英数字と句読点を全部やりたいです。私はc++を使用しています。

4

3 に答える 3

8

なぜだめですか:

int counters[256] = {0};
for(int i = 0; i <inString.length(); i++)
    counters[inString[i]]++;
}


std::cout << "Count occurences of \'a\'" << counters['a'] << std::endl;
于 2010-02-28T04:14:23.813 に答える
6

文字でインデックス付けされた配列を使用できます。

int counters[256];
for (int i = 0; i < inString.length(); i++) {
    counters[(unsigned char)inString[i]]++;
}

countersもちろん、配列をゼロに初期化することもできます。

于 2010-02-28T04:14:56.210 に答える
2

マップを使用することは完全に適用できるようです:

map<char,int> chcount;
for(int i=0; i<inString.length(); i++){
  t=inString[i];
  chcount[i]? chcount[i]++ : chcount[i]=1;
}
于 2010-02-28T04:38:51.563 に答える