2012-12-14 7 views
5

मैं निम्नलिखित समारोह में boost/algorithm/string.hpp में प्रदान की split() समारोह का उपयोग करने के कोशिश कर रहा हूँ:सी बूस्ट ++: विभाजित करें फ़ंक्शन 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; 
} 

निम्नलिखित कॉल:

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