2011-09-15 7 views
8

boost :: splitを使用して文字列全体を区切り文字として分割する方法があるかどうかを知りたいと思います。例えば:ブースト::区切り記号として全体の文字列を使用して分割

STR =「xxaxxxxabcxxxxbxxxcxxx」

は区切り文字として「ABC」を使用して、この文字列を分割する方法はありますか?したがって返す:

結果は、私が述語「is_any_of」、しかし「(ABC「)」is_any_of」を起動する結果となる使用してブースト::スプリットを認識していた文字列「xxaxxxx」と「xxxxbxxxcxxx」

だろう単一の文字 'a'、 'b'、 'c'で文字列を分割する際に、これは私が望むものではありません。

助けていただければ幸いです。

は、区切り文字は、正規表現で文字列を分割するboost::algorithm::split_regexを使用します(これは私が知っている方法ですが、多分もっと良い方法があります)はい方法があるあなたに

+0

'equals'とデリミタとして使用する文字列の値の組み合わせを使うことができるはずですが、具体的には今私を逃してしまいます。 –

+2

[Split on substring]の複製が可能です。(http://stackoverflow.com/questions/3739280/split-on-substring) – Cubbi

答えて

6

split_regex @Mythliによって示唆されているようには問題ありません。正規表現に対処したくない場合はifind_all algoを使用することができます(example)。区切り文字のすべての出現のうち、iterator_range(開始/終了)が表示されます。あなたのトークンはそれらの間にあります(そして文字列の最初と最後に)。

+0

このソリューションは私のニーズに完全に合っています。 – andre

6

に感謝します。

例:

vector<string> result; 
boost::algorithm::split_regex(result, str, regex("^((?!abc)*abc(?!abc)*)*$")) ; 
copy(result.begin(), result.end(), ostream_iterator<string>(cout, "\n")) ; 
+1

ありがとうございます。このソリューションは機能しますが、ブーストを構築する必要があります。現在、私はヘッダファイルのみを使用しています。 – andre

+1

#include

関連する問題