web-dev-qa-db-ja.com

2つのイテレータ間の `std :: string`のサブストリングを取得する

(p1、p2、p3、...)の形式で確率を指定するいくつかのオプションを入力として受け取ることが期待されるプログラムがあります。したがって、コマンドラインの使用法は文字通り次のようになります。

./myprog -dist (0.20, 0.40, 0.40)

このようなリストをC++で解析したいのですが、現在std :: string型のイテレーターとBoostが提供する分割関数を使用して解析を試みています。

// Assume stuff up here is OK
std::vector<string> dist_strs; // Will hold the stuff that is split by boost.
std::string tmp1(argv[k+1]);   // Assign the parentheses enclosed list into this std::string.

// Do some error checking here to make sure tmp1 is valid.

boost::split(dist_strs,  <what to put here?>   , boost::is_any_of(", "));

<what to put here?>部分の上に注意してください。始めと終わりの括弧を無視する必要があるので、私は次のようなことをしたいです

tmp1.substr( ++tmp1.begin(), --tmp1.end() )

しかし、これはsubstrがこのように機能するようには見えません。また、これを行うために機能するドキュメント内に関数を見つけることができません。

私が持っていた1つのアイデアは、これが許可されている場合はイテレータ演算を行い、substrを使用して

tmp1.substr( ++tmp1.begin(), (--tmp1.end()) - (++tmp1.begin()) )

しかし、これが許可されているのか、それが妥当な方法であるのかはわかりませんでした。これが有効な方法でない場合、より良い方法は何ですか? ...事前に感謝します。

26
ely

std::stringのコンストラクタは、必要な機能を提供する必要があります。

std::string(tmp1.begin() + 1, tmp1.end() - 1)
54
Pubby