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

標準では 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;
}
于 2012-12-16T23:25:48.283 に答える