2012-12-14 14 views
5

Próbuję użyć funkcji split() przewidzianego w boost/algorithm/string.hpp w następującej funkcji:C++ Boost: podziału funkcji 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; 
} 

Poniższa rozmowa:

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

dzieli ciąg do "Hieafds" "addgaeg" "adf" & "h". Jednak nie chcę, aby łańcuch był dzielony przez pojedynczy #. I Myślę, że, że problem jest z is_any_of().

Jak należy zmodyfikować funkcję, aby łańcuch był dzielony tylko przez wystąpienia "##"?

+1

Spróbuj użyć polecenia split_regex: http://www.cplusplus.com/faq/sequences/strings/split/#boost-split-regex – user1284631

+0

Dzięki =) Myślę, że to działa. – Enigman

+1

możesz również użyć iter_split (vec, str, first_finder ("##")); (zobacz tę odpowiedź: http://stackoverflow.com/a/5710242/1284631) – user1284631

Odpowiedz

7

masz rację, trzeba użyć is_any_of()

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

aktualizacji

Ale, jeśli chcesz podzielić na dokładnie dwa ostre, może trzeba użyć wyrażenie regularne:

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

spojrzeć na documentation example.

+0

Hej, przepraszam. Podczas wysyłania kodu wystąpił błąd. Poprawiłem to teraz, gdy tylko zobaczyłem twoją odpowiedź. Miałem na myśli, że jeśli użyję 'is_any_of()', sprawdza on którykolwiek z znaków w 'pivot' i dzieli się odpowiednio. Ale chcę go podzielić tylko wtedy, gdy oś dokładnie pasuje. – Enigman

+0

ah ok, spójrz na aktualizację! –

+0

Ta odpowiedź nie powinna być cofnięta, ponieważ odpowiada na oryginalną, nieco błędną wersję pytania (którą później zmieniono). – user1284631

Powiązane problemy