これで大きなファイルを処理することはできません。これが役立つ可能性があるため、配列の使用からマップに変更しました。どんな提案でも大歓迎です。
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;
標準では 8 ビットしかないためchar
、マップ全体を使用するのはかなり無駄です。256int
の配列を宣言し、 を に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;
}