我正在开展一个学校项目,以在文本上实现霍夫曼代码。第一部分当然需要对文本进行频率分析。除了巨大的开关和一系列计数器之外,还有更好的方法吗?
IE:
int[] counters
for(int i = 0; i <inString.length(); i++)
{
switch(inString[i])
case 'A':
counters[0]++;
.
.
.
我想做所有的字母数字字符和标点符号。我正在使用 C++。
我正在开展一个学校项目,以在文本上实现霍夫曼代码。第一部分当然需要对文本进行频率分析。除了巨大的开关和一系列计数器之外,还有更好的方法吗?
IE:
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;
}