どのように私はスイッチを使用せずに文字列を周波数解析を行うことができます

StackOverflow https://stackoverflow.com/questions/2350056

質問

私はテキストのハフマン符号を実装するために学校のプロジェクトを働いています。当然の最初の部分は、テキスト上の周波数分析を必要とします。それを行うための巨大なスイッチおよびカウンタの配列は別に、より良い方法はありますか?

すなわち

int[] counters

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

私はすべての英数字と句読点を行うしたいと思います。私はC ++を使用しています。

役に立ちましたか?

解決

なぜます:

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;

他のヒント

あなたは文字をインデックスとする配列を使用することができます

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

また、当然のことながら、ゼロにあなたのcounters配列を初期化することになるでしょう。

マップを使用して、完全に適用されるようです。

map<char,int> chcount;
for(int i=0; i<inString.length(); i++){
  t=inString[i];
  chcount[i]? chcount[i]++ : chcount[i]=1;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top