2011-08-16 19 views
11

क्या स्ट्रिंग को विभाजित करने के लिए सी में कोई तरीका है (strtok या किसी अन्य तरीके से) जहां डेलीमीटर लंबाई में एक से अधिक वर्ण हैं? मैं कुछ इस तरह की तलाश में हूँ:सी में एकाधिक वर्णों पर एक स्ट्रिंग को विभाजित करने का कोई तरीका है?

char a[14] = "Hello,World!"; 
char *b[2]; 
b[0] = strtok(a, ", "); 
b[1] = strtok(NULL, ", "); 

मैं इस स्ट्रिंग विभाजित नहीं करने के लिए अल्पविराम के बीच कोई जगह नहीं है क्योंकि वहाँ और डब्ल्यू वहाँ ऐसा करने के लिए एक रास्ता है करना चाहते हैं?

उत्तर

8

आप अपनी सीमा स्ट्रिंग की घटनाओं को खोजने और परिणामों के साथ विभाजित करने के लिए बार-बार substr पर कॉल कर सकते हैं। परिणाम मिलने के बाद, सबस्ट्रिंग की लंबाई से पॉइंटर को अग्रिम करें और फिर से खोजें।

+0

क्या सी या सी ++ है? – Jason

+2

यह सी है यदि आप '' शामिल करते हैं, और यदि आप 'std :: substr' कहते हैं तो यह C++ है और इसमें' 'शामिल है, हालांकि C++ में आप स्ट्रिंग के लिए नग्न चार पॉइंटर्स का उपयोग नहीं करेंगे। –

+0

@ केरेक: आप जो कर रहे हैं उस पर निर्भर करता है। नग्न चार सूचक जोड़े डेटा प्रतियां या आवंटन की आवश्यकता के बिना मेमोरी मैप किए गए टेक्स्ट फ़ाइलों को पार्स करने के लिए वास्तव में अच्छी तरह से काम करते हैं। आप उन्हें एक अच्छी कक्षा में, निश्चित रूप से लपेटें। –

4

आप अपनी स्ट्रिंग के भीतर अपनी डेलीमीटर स्ट्रिंग का पता लगाने के लिए char * strstr(const char *haystack, const char *needle) का उपयोग कर सकते हैं।

char a[14] = "Hello,World!"; 
char b[2] = ", "; 
char *start = a; 
char *delim; 
do { 
    delim = strstr(start, b); 
    // string between start and delim (or end of string if delim is NULL). 
    start = delim + 2; // Use lengthof your b string. 
} while (delim); 
+0

हालांकि आपको पहले डेलीमीटर से पहले कुछ भी नहीं दिया जाएगा (हालांकि, "हैलो, वर्ल्ड!" के मामले में आपको कुछ भी नहीं दे रहा है। –

+0

धन्यवाद ब्रायन। फिक्स्ड –

+1

-1 यदि स्ट्रस्ट वापस लौटाता है तो आप न्यूल बढ़ाएंगे; 'char * बी [2] = "," 'एक गलती है, सही है' char b [] = ","; 'या' const char * b = ","; ' – user411313

1

ऐसा कुछ हो सकता है? कोई गारंटी नहीं है कि यह संकलित करता है। ;)

char* strstrtok(char *haystack, char *needle) { 
    static char *remaining = null; 
    char *working; 

    if(haystack) 
     working = haystack; 
    else if(remaining) 
     working = remaining; 
    else 
     return NULL; 

    char *result = working; 
    if(result = strstr(working, needle)) 
     remaining = working + strlen(needle) + 1; 

    return result; 
} 
+0

यह केवल सी 99 कोड है – user411313

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

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