課題かなにかみたいだから"そのものヅバリ"を見せるわけにはいかんだろう。
なのでかなり近いC++コード:
C++
1// charcount.cpp
2#include <iostream>
3#include <iomanip>
4#include <iterator>
5#include <algorithm>
6
7int main() {
8 int hist[256]; // 度数分布表
9 std::fill_n(hist, 256, 0); // まず0クリア
10
11 // 出現頻度を勘定する(ただし多バイト文字も1byte文字として)
12 std::for_each( std::istream_iterator<char>(std::cin),
13 std::istream_iterator<char>(),
14 [&hist](unsigned char ch) { hist[ch]++; });
15
16 // いちばんたくさん出てきたやつ
17 int max_count = *std::max_element(hist, hist+256);
18
19 // 出現頻度を出力(最頻には'*'を付加)
20 for ( int i = 32; i < 127; ++i ) {
21 if ( hist[i] != 0 ) {
22 std::cout << (char)i << " : " << std::setw(3) << hist[i] << ' ';
23 if ( hist[i] == max_count ) { std::cout << '*'; }
24 std::cout << '\t';
25 }
26 }
27 std::cout << std::endl;
28 return 0;
29}
自分自身(charcount.cpp)を食わせてみた:
D:\work>charcount < charcount.cpp
! : 1 " : 2 # : 4 & : 1 ' : 8
( : 13 ) : 13 * : 3 + : 5 , : 5
. : 1 / : 12 0 : 4 1 : 1 2 : 5
3 : 2 5 : 3 6 : 3 7 : 1 : : 25
; : 12 < : 23 = : 5 > : 6 A : 1
N : 1 [ : 6 \ : 2 ] : 6 _ : 7
a : 18 c : 21 d : 18 e : 18 f : 5
g : 2 h : 18 i : 39 l : 9 m : 10
n : 20 o : 19 p : 6 r : 19 s : 26
t : 47 * u : 13 w : 1 x : 6 z : 1
{ : 5 } : 5