C++ 我如何在不使用开关的情况下对字符串进行频率分析
我正在做一个学校项目,在文本上实现哈夫曼代码。当然,第一部分需要对文本进行频率分析。除了一个巨大的开关和一系列计数器之外,还有更好的方法吗 即:C++ 我如何在不使用开关的情况下对字符串进行频率分析,c++,huffman-code,frequency-analysis,C++,Huffman Code,Frequency Analysis,我正在做一个学校项目,在文本上实现哈夫曼代码。当然,第一部分需要对文本进行频率分析。除了一个巨大的开关和一系列计数器之外,还有更好的方法吗 即: int[]计数器 对于(inti=0;i为什么不: int counters[256] = {0}; for(int i = 0; i <inString.length(); i++) counters[inString[i]]++; } std::cout << "Count occurences of \'a\'" &
int[]计数器
对于(inti=0;i为什么不:
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计数器[256]={0};
对于(int i=0;i,可以使用按字符索引的数组:
int counters[256];
for (int i = 0; i < inString.length(); i++) {
counters[(unsigned char)inString[i]]++;
}
int计数器[256];
对于(int i=0;i
当然,您还需要将计数器
数组初始化为零。使用映射似乎完全适用:
map<char,int> chcount;
for(int i=0; i<inString.length(); i++){
t=inString[i];
chcount[i]? chcount[i]++ : chcount[i]=1;
}
map-chcount;
for(int i=0;i)和那些在家玩优化游戏的人,for(int i=inString.length()-1;i>=0;i-)
。@Dav:如果您想优化,请取消对inString.length()的调用
而不是循环外。倒计时通常会适得其反,原因很简单,因为您的缓存可能没有预料到这一点——而一次缓存未命中将花费更多的比较。更重要的是,将其从条件值移动到初始值设定项会减少对.length()的函数调用
。但是,将其移出循环也可以很好地工作。我通常以的形式编写(int I=0,imax=inString.length();I
。如果你从国有化字符集的世界冒险进入广阔的Unicode世界,这一点尤其正确。
map<char,int> chcount;
for(int i=0; i<inString.length(); i++){
t=inString[i];
chcount[i]? chcount[i]++ : chcount[i]=1;
}