0

我不能让它处理一个大文件。我从使用数组改为使用地图,因为这可能会有所帮助。任何建议表示赞赏。

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;
4

1 回答 1

2

由于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;
}
于 2012-12-16T23:25:48.283 回答