ゆとりーなの日記

日記的な事を書いて行くと思はれる

どんどん短くなる?

http://d.hatena.ne.jp/nagoya313/20100613/1276443497で大分遊んだわけですが、ファイルを BOOST_FOREACH で行ごとに処理したい - 野良C++erの雑記帳を参考にしたところ更に面白くなったんです。

#include <fstream>
#include <string>
#include <regex>
#include <vector>
#include <boost/range/algorithm/for_each.hpp>
#include <boost/range/adaptor/reversed.hpp>
#include <boost/foreach.hpp>
#include <pstade/oven/stream_lines.hpp>

int main() {
  std::ifstream fin("constitute.txt");
  std::ofstream fout("reverse.txt");
  if (!(fin && fout)) {
    return -1;
  }
  BOOST_FOREACH(const std::string &str, (pstade::oven::stream_lines(fin))) {
    boost::for_each(std::vector<std::smatch>(std::sregex_iterator(str.begin(), str.end(), std::regex("\\s+|\\w+|\\W")),
      std::sregex_iterator()) | boost::adaptors::reversed, [&fout](const std::smatch &str) {
      fout << str[0];
    });
    fout << std::endl;
  }
  return 0; 
}

oven初デビューです。