2012-12-14 12 views
5

)(is_any_of私は次の関数でboost/algorithm/string.hppで提供split()機能を使用しようとしています:Cはブースト++:Split関数を

vector<std::string> splitString(string input, string pivot) { //Pivot: e.g., "##" 
    vector<string> splitInput; //Vector where the string is split and stored 
    split(splitInput,input,is_any_of(pivot),token_compress_on);  //Split the string 
    return splitInput; 
} 

に次の呼び出し:

string hello = "Hieafds##addgaeg##adf#h"; 
vector<string> split = splitString(hello,"##"); //Split the string based on occurrences of "##" 

をに文字列を分割"Hieafds" "addgaeg" "adf" & "h"。しかし、私は文字列を単一の#で分割したくありません。 I は、問題がis_any_of()であると考えています。

"##"の出現によってのみ文字列が分割されるように、関数をどのように変更する必要がありますか?

+1

split_regexを試してみてください:http://www.cplusplus.com/faq/sequences/strings/split/#boost-split-regex – user1284631

+0

ありがとう=)私はそれが動作すると思います。 – Enigman

+1

また、iter_split(vec、str、first_finder( "##"))を使用することもできます。 (この回答を参照してください:http://stackoverflow.com/a/5710242/1284631) – user1284631

答えて

7

そうだね、あなたはis_any_of()

std::string input = "some##text"; 
std::vector<std::string> output; 
split(output, input, is_any_of("##")); 

更新

を使用する必要があります。しかし、あなたはちょうど二つの鋭いを上分割したい場合は、多分あなたは使用する必要があります正規表現:

split_regex(output, input, regex("##")); 

documentation exampleをご覧ください。

+0

ねえ、すみません。コードを投稿する際にエラーが発生しました。私はあなたの答えを見てすぐにそれを修正しました。私は 'is_any_of()'を使うとピボットの文字をチェックし、それに応じて分割することを意味していました。しかしピボットが正確に一致する場合にのみ分割したいと思います。 – Enigman

+0

ああ、更新を見てください! –

+0

この回答は、(後で編集された)元々のやや間違ったバージョンの質問に回答したため、下書きしないでください。 – user1284631