2010-08-26 4 views
7

मैं सीपीपी स्ट्रिंग के लिए स्ट्रिंग टोकेनाइज़र का उपयोग करना चाहता हूं लेकिन मुझे लगता है कि मैं चार * के लिए खोज सकता था। क्या सीपीपी स्ट्रिंग के लिए कुछ भी समान है?स्ट्रिंग टोकननाइज़र?

+17

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

+0

संभावित डुप्लिकेट [std :: स्ट्रिंग :: स्ट्रिंग के साथ स्ट्रैटोक का उपयोग करना] (http://stackoverflow.com/questions/289347/using-strtok-with-a-stdstring) – bobobobo

उत्तर

7

पर एक नज़र रखना चाहिए?

std::istringstream iss("blah wrxgl bxrcy") 
for(;;) { 
    std::string token; 
    if(!(iss>>token)) break; 
    process(token); 
} 
if(!iss.eof()) report_error(); 

वैकल्पिक रूप से, अगर आपके एक एक निश्चित ही अलग चरित्र की तलाश में हैं, तो आप iss>>tokenstd::getline(iss,token,sep_char) से बदल सकते हैं: अगर यह कुछ द्वारा किसी भी खाली स्थान के अलग है, स्ट्रिंग धाराओं तुम क्या चाहते है।

यदि यह एक से अधिक वर्ण है जो विभाजक के रूप में कार्य कर सकता है (और यदि यह सफेद जगह नहीं है), std::string::find_first() और std::string::substr() के संयोजनों को करना चाहिए।

+1

+1 विकल्प – Chubsdad

+0

क्या '(;;) 'ओवर' (जारी >> टोकन)' के लिए पसंद करने का कोई अच्छा कारण है (मान लीजिए कि 'टोकन' लूप से पहले घोषित किया गया था)? इस उदाहरण में यह एक पंक्ति छोटी होगी, और, मेरी राय में, कम से कम कम पठनीय नहीं। –

+0

@ Space_C0wb0y: (मुझे केवल आपकी टिप्पणी समझा गया। ठीक है, कम से कम मुझे लगता है कि मैं करता हूं ...) मैं बस 'लूप' की चतुरता पर एक और स्थानीय चर को पसंद करता हूं। – sbi

0

चेक बाहर find_first_of तरह एसटीएल algos, find_first_not_of और इतने पर एक कस्टम बनाने के लिए।

4

आप के रूप chubsdad या उपयोग को बढ़ावा देने tokenizer से कहा है कर सकते हैं: http://www.boost.org/doc/libs/1_44_0/libs/tokenizer/tokenizer.htm

खुद के द्वारा यह ऐसा करने से जटिल अगर आप बूस्ट द्वारा affraid रहे नहीं है।

+0

यहां चब्सडाड से +1 है :) – Chubsdad

0

इस स्निपेट मैंने कहीं पाया प्रयास करें (हो सकता है यहां तक ​​कि यहाँ?):

#include <string> 
#include <vector> 
#include <sstream> 

std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) { 
    std::stringstream ss(s); 
    std::string item; 
    while(std::getline(ss, item, delim)) { 
     elems.push_back(item); 
    } 
    return elems; 
} 


std::vector<std::string> split(const std::string &s, char delim) { 
    std::vector<std::string> elems; 
    return split(s, delim, elems); 
} 
संबंधित मुद्दे