要求: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;
}
スポンサード リンク

この記事のカテゴリ

  • ⇒ ハイテクとローテク