2012-12-14 7 views
5

Ich versuche, die split() Funktion in boost/algorithm/string.hpp in der folgenden Funktion zu nutzen:C++ Boost: Split-Funktion is_any_of()

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; 
} 

Der folgende Aufruf:

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

die Zeichenfolge teilt sich in "Hieafds" "addgaeg" "adf" & "h". Allerdings möchte ich nicht, dass die Zeichenfolge durch eine einzelne # geteilt wird. I denke,, dass das Problem mit is_any_of() ist.

Wie sollte die Funktion so geändert werden, dass die Zeichenfolge nur durch das Auftreten von "##" geteilt wird?

+1

Versuchen Sie mit split_regex: http://www.cplusplus.com/faq/sequences/strings/split/#boost-split-regex – user1284631

+0

Thanks =) Ich schätze, es funktioniert. – Enigman

+1

können Sie auch iter_split (vec, str, first_finder ("##")) verwenden; (Siehe diese Antwort: http://stackoverflow.com/a/5710242/1284631) – user1284631

Antwort

7

Du hast Recht, haben Sie is_any_of()

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

Update

Aber verwenden, wenn Sie genau zwei scharfe aufzuspalten auf wollen, vielleicht müssen Sie ein verwenden regulärer Ausdruck:

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

werfen Sie einen Blick auf die documentation example.

+0

Hey, es tut mir leid. Beim Posten des Codes ist ein Fehler aufgetreten. Habe es jetzt korrigiert, sobald ich deine Antwort gesehen habe. Ich meinte, wenn ich 'is_any_of()' verwende, sucht es nach einem der Zeichen im 'pivot' und teilt es entsprechend auf. Aber ich möchte es nur teilen, wenn der Pivot genau übereinstimmt. – Enigman

+0

ah ok, schau dir das Update an! –

+0

Diese Antwort sollte nicht downvoted werden, weil sie eine ursprüngliche, leicht falsche Version der Frage beantwortete (die später bearbeitet wurde) – user1284631