2011-09-15 15 views
8

के रूप में विभाजित करें मैं जानना चाहता हूं कि बूस्ट :: स्प्लिट का उपयोग करके एक स्ट्रिंग को विभाजित करने के लिए एक स्ट्रिंग को विभाजित करने के लिए कोई विधि है या नहीं। उदाहरण के लिए:बूस्ट :: संपूर्ण स्ट्रिंग का उपयोग डिलीमीटर

str = "xxaxxxxabcxxxxbxxxcxxx"

वहाँ इस स्ट्रिंग विभाजित करने के लिए एक विधि "abc" का उपयोग कर एक परिसीमक के रूप में है? इसलिए लौटने:

परिणाम स्ट्रिंग "xxaxxxx" और "xxxxbxxxcxxx"

मैं का उपयोग कर बढ़ावा :: विभाजन के बारे में पता "is_any_of" विधेय, हालांकि "is_any_of लागू (" abc ")" परिणाम होगा हूँ होगा एकल वर्ण 'ए', 'बी', और 'सी' पर स्ट्रिंग को विभाजित करने के लिए, जो मैं नहीं चाहता हूं।

किसी भी मदद की सराहना की जाएगी।

धन्यवाद

+0

आपको 'बराबर' के कुछ संयोजन और स्ट्रिंग मान को डेलीमीटर के रूप में उपयोग करने में सक्षम होना चाहिए, लेकिन विनिर्देश अभी मुझे elude। –

+2

[सबस्ट्रिंग पर विभाजित] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/3739280/split-on-substring) – Cubbi

उत्तर

6

split_regex रूप @Mythli ने सुझाव दिया ठीक है। यदि आप रेगेक्स से निपटना नहीं चाहते हैं, तो आप ifind_all एल्गो का उपयोग कर सकते हैं, जैसा कि example में दिखाया गया है। आपको डेलीमीटर की सभी घटनाओं के iterator_range (प्रारंभ/समाप्ति) प्राप्त होते हैं। आपके टोकन उनके बीच हैं (और स्ट्रिंग की शुरुआत और अंत में)।

+0

धन्यवाद, यह समाधान पूरी तरह से मेरी आवश्यकताओं को पूरा करता है। – andre

6

हाँ वहाँ एक रास्ता है (यह एक तरह से मैं जानता हूँ कि है, हो सकता है वहाँ एक बेहतर तरीका है) का उपयोग करें boost::algorithm::split_regex चरित्र दृश्यों जहां सीमांकक नियमित अभिव्यक्ति कर रहे हैं विभाजित करने के लिए है।

उदाहरण:

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

# शामिल <बूस्ट/एल्गोरिदम/स्ट्रिंग/regex.hpp> –

संबंधित मुद्दे