महत्वपूर्ण: strtok
फिर से प्रवेशी नहीं है, आप इसे करने के बजाय strtok_r
उपयोग करना चाहिए।
आप मूल स्ट्रिंग की एक प्रति की बचत, और कहा कि कॉपी में वर्तमान टोकन के ऑफसेट में देख कर ऐसा कर सकते हैं:
char str[] = "Hello there; How are you?/I'm good - End";
char *copy = strdup(str);
char *delim = ";-/";
char *res = strtok(str, delim);
while (res) {
printf("%c\n", copy[res-str+strlen(res)]);
res = strtok(NULL, delim);
}
free(copy);
यह प्रिंट
;
/
-
Demo #1
संपादित करें:एकाधिक डिलीमीटरों को संभालना
यदि आपको कई डिलीमीटरों को संभालने की आवश्यकता है, तो डिलीमीटरों के वर्तमान अनुक्रम की लंबाई निर्धारित करना थोड़ा कठिन हो जाता है: अब आपको निर्णय लेने से पहले अगला टोकन ढूंढना होगा कि डिलीमीटरों का अनुक्रम कितना समय है।गणित जटिल नहीं है, जब तक आप याद के रूप में है कि NULL
विशेष उपचार की आवश्यकता है:
char str[] = "(20*(5+(7*2)))+((2+8)*(3+6*9))";
char *copy = strdup(str);
char *delim = "*+()";
char *res = strtok(str, delim);
while (res) {
int from = res-str+strlen(res);
res = strtok(NULL, delim);
int to = res != NULL ? res-str : strlen(copy);
printf("%.*s\n", to-from, copy+from);
}
free(copy);
Demo #2
जानकारी के लिए, जब आप आदमी strtok: इस इंटरफ़ेस strsep द्वारा अप्रयुक्त है (3)। – Geoffroy
नहीं, लेकिन यदि आप एक ऐसा संस्करण पूछने के लिए कोई प्रश्न पूछते हैं जो कोई करता है, तो कोई व्यक्ति लिख सकता है। char * strtok_new (char * string, const char * delimiters, char * मिलान); – Scooter
ध्यान दें कि 'strsep' सी या पॉज़िक्स में नहीं है (हालांकि' strtok_r' पॉज़िक्स में है और 'strtok_s' सी 11 में है), लेकिन यह एलएसबी और बीएसडी में है। इसलिए 'स्ट्रेटोक' को कुछ सिस्टमों पर 'स्ट्रसेप' द्वारा अप्रचलित किया जाता है, न कि अन्य। मैन पेजों के बारे में बात यह है कि वे केवल उस सिस्टम पर लागू होते हैं जब आप 'मैन' चलाते हैं। –