テキストファイル内で使われている文字を数える
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