我不能让它处理一个大文件。我从使用数组改为使用地图,因为这可能会有所帮助。任何建议表示赞赏。
map<char,int> freq;
size_t size = 0;
for (char c; cin.get(c); size++){
if (isalpha(c))
freq[tolower(c)]++;
}
cout << "char" << freq['a'] << endl;
由于char
按照标准只有八位,因此使用整个地图是相当浪费的。int
声明一个 256 s的数组,将你的char
变成unsigned
,并以可以想象的最快方式计算频率:
int freq[256];
size_t size = 0;
// Count without any checks or conditions
for (char c ; cin.get(c) ; size++) {
freq[(unsigned char)c]++;
}
// Go through the lowercase letters, and add upper frequencies to them
for (int i = 'a' ; i <= 'z' ; i++) {
freq[i] += freq[toupper(i)];
cout << (char)i << " --> " << freq[i] << endl;
}