2010-11-12 13 views
5

संभव डुप्लिकेट परिसीमक के रूप में खाली स्थान के उपयोग करते हुए:
How do I tokenize a string in C++?विभाजन C/C++ में एक पंक्ति

स्यूडोकोड:

Attributes[] = Split line(' ') 

कैसे?

मैं यह कर दिया गया है:

char *pch; 
    pch = strtok(line," "); 
    while(pch!=NULL) 
    { 
     fputs (pch, stdout); 


    } 

और एक गैर लिखा, रुक जाता है बाहर निकलें फ़ाइल हो रही। इसमें कुछ गड़बड़ है? ठीक है, यह चीज़ मेरी छद्मोडोड आवश्यकता को भी पूरा नहीं कर रही है, लेकिन मैं अपने सरणी में टोकन (चार सरणी के रूप में) को इंडेक्स करने के बारे में उलझन में हूं, मुझे लगता है कि मुझे 2-मंद सरणी लिखनी चाहिए?

+3

समाधान अलग है। – dreamlax

+17

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

उत्तर

5

यह बहुत डुप्लिकेट नहीं है - सी ++ के लिए @Zunino द्वारा स्वीकृत उत्तर here को देखें और ऊपर उठाएं।

नीचे मूल कोड लेकिन उत्तर के पूर्ण गौरवशाली लालित्य को देखने के लिए आपको उस पर क्लिक करना होगा।

#include <iostream> 
#include <string> 
#include <sstream> 
#include <algorithm> 
#include <iterator> 

int main() { 
    using namespace std; 
    string sentence = "Something in the way she moves..."; 
    istringstream iss(sentence); 
    copy(istream_iterator<string>(iss), 
      istream_iterator<string>(), 
      ostream_iterator<string>(cout, "\n")); 
} 

इस तथ्य पर टिका है कि डिफ़ॉल्ट रूप से, istream_iterator व्यवहार करता है व्हाइट स्पेस को अपने विभाजक के रूप में। परिणामस्वरूप टोकन cout पर अलग-अलग लाइनों पर लिखे गए हैं (ostream_iterator के लिए कन्स्ट्रक्टर अधिभार में निर्दिष्ट प्रति विभाजक)।

+0

मैंने इसका इस्तेमाल किया, धन्यवाद। – andandandand

8

strtok" " के साथ अपने डेलीमीटर के रूप में उपयोग करें।

+0

सी के लिए यह बहुत अच्छा है, सी ++ के लिए मेरे उत्तर में संबंधित प्रश्न देखें। –

1

सबसे आसान तरीका boost::split है: आप सी या सी का उपयोग कर रहे हैं कि क्या ++ के आधार पर

std::vector<std::string> words; 
boost::split(words, your_string, boost::is_space()); 
संबंधित मुद्दे