テキストファイル内で使われている文字を数える

range の練習問題

#include <iostream>

#include <boost/range/algorithm/count.hpp>
#include <boost/range/counting_range.hpp>

#include <pstade/oven/file_range.hpp>

int
main(){
    namespace oven = pstade::oven;
    
    auto    frange = oven::file_range<char>("BOOST_LICENSE_1_0.txt");
    BOOST_FOREACH(char key, boost::counting_range('0', 'z')){
        std::cout << key << ":" << boost::count(frange, key) << std::endl;
    }
    
    return 0;
}


boost::counting_range で比較する文字を用意して、boost::count で一致した数を取得。
速度とかは特に考えてない。
一致した数を返す range があればもっとスマートになるかも。


こんな感じ。

// boost::iterator_range<fusion::vector<char, int> >が返ってくる
boost::count(frange, boost::counting_range('0', 'z'));


あとファイルの文字を走査しながら動的に boost::counting_range を作りたい。
ワイド文字だとこうしないと難しい。


[boost/pstade]
ver 1.44.0 / ver 1.04.3