2010-10-29 31 views
10

में स्ट्रिंग और सामान सामग्री को विभाजित करने का सुरुचिपूर्ण तरीका मैं व्हाइटस्पेस के साथ एक स्ट्रिंग को विभाजित करना चाहता हूं, और मुझे पता है कि टोकन वैध पूर्णांक का प्रतिनिधित्व करता है। मैं टोकन को पूर्णांक में बदलना चाहता हूं और उनके साथ एक वेक्टर पॉप्युलेट करना चाहता हूं।सी ++: std :: vector

मैं बूस्ट :: स्प्लिट का उपयोग कर सकता हूं, टोकन स्ट्रिंग का वेक्टर बना सकता हूं, फिर std :: transform का उपयोग कर सकता हूं।

आपका समाधान क्या है? बढ़ावा का उपयोग स्वीकार्य है।

+3

संभव डुप्लिकेट (http://stackoverflow.com/questions/53849/how-do-i-tokenize-a-string-in-c) - @KeithB –

+18

से उत्तर देखें निम्न में से कुछ उदाहरणों के बारे में: http: //www.codeproject। कॉम/केबी/रेसिपी/Tokenizer.aspx वे बहुत ही कुशल और कुछ हद तक सुरुचिपूर्ण हैं। स्ट्रिंग टूलकिट लाइब्रेरी सी ++ में जटिल स्ट्रिंग प्रसंस्करण को सरल और आसान बनाता है। –

उत्तर

8

कुछ इस तरह:

std::istringstream iss("42 4711 "); 
std::vector<int> results(std::istream_iterator<int>(iss) 
         , std::istream_iterator<int>()); 

?

3

आप Boost.Tokenizer का उपयोग कर सकते हैं। इसे आसानी से explode_string फ़ंक्शन में लपेटा जा सकता है जो एक स्ट्रिंग और डिलीमीटर लेता है और टोकन का वेक्टर देता है।

लौटा वेक्टर पर transform का उपयोग करना स्ट्रिंग्स से इन्ट्स में परिवर्तन के लिए एक अच्छा विचार है; आप बूस्ट को भी पास कर सकते हैं। टोकराइज़र इटरेटर एल्गोरिदम में।

+0

क्या मनमाने ढंग से टोकन के साथ boost :: tokenizer का उपयोग करने का कोई तरीका है? ऐसा लगता है कि '' ',', ',' (',') ','; '' जैसे वर्णों के साथ काम करना प्रतीत होता है। उदाहरण के लिए '' m'' टोकन के रूप में उपयोग करने का कोई तरीका है? – user3728501

0

आप हमेशा strtok या string.find() का उपयोग कर सकते हैं। तार, तो std::for_each और या तो atoi या boost::lexical_cast का एक वेक्टर में split स्ट्रिंग के लिए

1

उपयोग बूस्ट की स्ट्रिंग एल्गोरिथ्म पुस्तकालय उन्हें int रों में बदलने के लिए। यह अन्य विधियों की तुलना में कहीं अधिक सरल होने की संभावना है, लेकिन प्रतिलिपि के कारण सबसे बड़ा प्रदर्शन नहीं हो सकता है (अगर किसी के पास इसे सुधारने और उसे हटाने का कोई तरीका है, तो कृपया टिप्पणी करें)।

std::vector<int> numbers; 

void append(std::string part) 
{ 
    numbers.push_back(boost::lexical_cast<int>(part)); 
} 

std::string line = "42 4711"; // borrowed from sbi's answer 
std::vector<std::string> parts; 
split(parts, line, is_any_of(" ,;")); 
std::for_each(parts.being(), parts.end(), append); 

काफी हद तक।

http://www.boost.org/doc/libs/1_44_0/doc/html/string_algo.html http://www.boost.org/doc/libs/1_44_0/libs/conversion/lexical_cast.htm

की [मैं सी ++ में एक स्ट्रिंग कैसे tokenize करते हैं?]
संबंधित मुद्दे