要求:dev.activebasic.com/egtra/?p=117のようなhttp://抜きのURLからドメインの部分を除いた絶対パス/egtra/?p=117の部分を得るC++プログラムが欲しい。
入力はargv[1]から、出力は標準出力へということにしてとっさにこんなコードを書きました(抜粋)。
using namespace pstade::oven; using namespace boost::lambda; boost::copy(argv[1] | as_c_str | dropped_while(_1 != '/'), std::ostream_iterator<char>(std::cout, "")); |
Ok, 動きました。しかし、この瞬間、そもそもやりたかったことはこれで十分だったという結論が浮かび上がって……。
std::cout << std::strchr(argv[1], '/'); |
スラッシュが見付からなかったときが問題ですが、ここでは些細な問題です。使った1時間は戻ってきません。
完全なソースです。Boost 1.34.1, PStade 1.04.3使用です。軽い実験用のコードなので、argc/argvのチェックは行っていません。
#pragma warning(disable: 4819 4127 4100 4512) #include <cstring> #include <iostream> #include <boost/lambda/lambda.hpp> #include <boost/range_ex/algorithm.hpp> #include <pstade/oven/dropped.hpp> #include <pstade/oven/dropped_while.hpp> #include <pstade/oven/as_c_str.hpp> int main(int argc, char** argv) { using namespace pstade::oven; using namespace boost::lambda; boost::copy(argv[1] | as_c_str | dropped_while(_1 != '/'), std::ostream_iterator<char>(std::cout, "")); std::cout << '\n'; std::cout << std::strchr(argv[1], '/') << std::endl; return 0; } |
スポンサード リンク |
この記事のカテゴリ
- C++ ⇒ ハイテクとローテク
[…] 現在公開されているVC++ 10のCTP(≒開発中体験版)では、ラムダ関数が使えるということで試してみました。ラムダ関数、つまりその場で書ける無名関数ですが、自分は何よりPStade.Ovenと組み合わせて使いたいと思っていました。というわけで、以前PStade.OvenにBoost.Lambdaを使っていたプログラムをラムダ関数に置き換えてみました。 […]