2012-04-04 8 views
19

私は、入力として(p1、p2、p3、...)の形式で確率を指定するいくつかのオプションを取ると予想されるプログラムを持っています。2つのイテレータの間で `std :: string 'の部分文字列を取得する

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

は、私はC++でこのようなリストを解析したいと私は現在のstd :: string型とブーストが提供するスプリット機能のためのイテレータでそれをやろうとしています:だから、コマンドラインの使用法は、文字通りになります。

// 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作品こうして似ていない、と私はこれを行うために働くドキュメントの機能を見つけることができません。私が持っていた

ひとつのアイデアは、これが許可されている場合、反復子演算を行い、そして

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

を呼び出すためにsubstrを使用していたが、これが許可されているかどうかわかりませんでした、またはそれが合理的な方法には、ある場合にはそれをやる。これが有効なアプローチでない場合、より良いものは何ですか? ...事前に多くの感謝。

答えて

39

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

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