4

我正在开展一个学校项目,以在文本上实现霍夫曼代码。第一部分当然需要对文本进行频率分析。除了巨大的开关和一系列计数器之外,还有更好的方法吗?

IE:

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 回答