मैं सीपीपी स्ट्रिंग के लिए स्ट्रिंग टोकेनाइज़र का उपयोग करना चाहता हूं लेकिन मुझे लगता है कि मैं चार * के लिए खोज सकता था। क्या सीपीपी स्ट्रिंग के लिए कुछ भी समान है?स्ट्रिंग टोकननाइज़र?
उत्तर
पर एक नज़र रखना चाहिए?
std::istringstream iss("blah wrxgl bxrcy")
for(;;) {
std::string token;
if(!(iss>>token)) break;
process(token);
}
if(!iss.eof()) report_error();
वैकल्पिक रूप से, अगर आपके एक एक निश्चित ही अलग चरित्र की तलाश में हैं, तो आप iss>>token
std::getline(iss,token,sep_char)
से बदल सकते हैं: अगर यह कुछ द्वारा किसी भी खाली स्थान के अलग है, स्ट्रिंग धाराओं तुम क्या चाहते है।
यदि यह एक से अधिक वर्ण है जो विभाजक के रूप में कार्य कर सकता है (और यदि यह सफेद जगह नहीं है), std::string::find_first()
और std::string::substr()
के संयोजनों को करना चाहिए।
+1 विकल्प – Chubsdad
क्या '(;;) 'ओवर' (जारी >> टोकन)' के लिए पसंद करने का कोई अच्छा कारण है (मान लीजिए कि 'टोकन' लूप से पहले घोषित किया गया था)? इस उदाहरण में यह एक पंक्ति छोटी होगी, और, मेरी राय में, कम से कम कम पठनीय नहीं। –
@ Space_C0wb0y: (मुझे केवल आपकी टिप्पणी समझा गया। ठीक है, कम से कम मुझे लगता है कि मैं करता हूं ...) मैं बस 'लूप' की चतुरता पर एक और स्थानीय चर को पसंद करता हूं। – sbi
चेक बाहर find_first_of तरह एसटीएल algos, find_first_not_of और इतने पर एक कस्टम बनाने के लिए।
आप के रूप chubsdad या उपयोग को बढ़ावा देने tokenizer से कहा है कर सकते हैं: http://www.boost.org/doc/libs/1_44_0/libs/tokenizer/tokenizer.htm
खुद के द्वारा यह ऐसा करने से जटिल अगर आप बूस्ट द्वारा affraid रहे नहीं है।
यहां चब्सडाड से +1 है :) – Chubsdad
आप "टोकन" से क्या मतलब है Boost Tokenizer
इस स्निपेट मैंने कहीं पाया प्रयास करें (हो सकता है यहां तक कि यहाँ?):
#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);
}
कैसे निम्नलिखित से उदाहरण से कुछ के बारे: http://www.codeproject.com/KB/recipes/Tokenizer। एएसपीएक्स वे बहुत ही कुशल और कुछ हद तक सुरुचिपूर्ण हैं। स्ट्रिंग टूलकिट लाइब्रेरी सी ++ में जटिल स्ट्रिंग प्रसंस्करण को सरल और आसान बनाता है। –
संभावित डुप्लिकेट [std :: स्ट्रिंग :: स्ट्रिंग के साथ स्ट्रैटोक का उपयोग करना] (http://stackoverflow.com/questions/289347/using-strtok-with-a-stdstring) – bobobobo