यह समझने के लिए कि कैसे strtok()
काम करता है, सबसे पहले यह जानने की जरूरत है कि एक स्थिर चर क्या है। यह लिंक इसे काफी अच्छी तरह से समझाता है…।
के संचालन के लिए महत्वपूर्ण है, अलग- strtok()
अलग कॉल के बीच आखिरी सेपरेटर के स्थान को संरक्षित करना (इसीलिए strtok()
यह बहुत मूल स्ट्रिंग को पार्स करना जारी रखता है जो इसे पास किया जाता है जब इसे एक के साथ लगाया जाता हैnull pointer
क्रमिक कॉल के ) ।।
मेरे स्वयं के strtok()
कार्यान्वयन पर एक नज़र डालें , जिसे कहा जाता है zStrtok()
, जिसके द्वारा प्रदान किए गए की तुलना में एक अलग तरह की कार्यक्षमता हैstrtok()
char *zStrtok(char *str, const char *delim) {
static char *static_str=0; /* var to store last address */
int index=0, strlength=0; /* integers for indexes */
int found = 0; /* check if delim is found */
/* delimiter cannot be NULL
* if no more char left, return NULL as well
*/
if (delim==0 || (str == 0 && static_str == 0))
return 0;
if (str == 0)
str = static_str;
/* get length of string */
while(str[strlength])
strlength++;
/* find the first occurance of delim */
for (index=0;index<strlength;index++)
if (str[index]==delim[0]) {
found=1;
break;
}
/* if delim is not contained in str, return str */
if (!found) {
static_str = 0;
return str;
}
/* check for consecutive delimiters
*if first char is delim, return delim
*/
if (str[0]==delim[0]) {
static_str = (str + 1);
return (char *)delim;
}
/* terminate the string
* this assignmetn requires char[], so str has to
* be char[] rather than *char
*/
str[index] = '\0';
/* save the rest of the string */
if ((str + index + 1)!=0)
static_str = (str + index + 1);
else
static_str = 0;
return str;
}
और यहाँ एक उदाहरण उपयोग है
Example Usage
char str[] = "A,B,,,C";
printf("1 %s\n",zStrtok(s,","));
printf("2 %s\n",zStrtok(NULL,","));
printf("3 %s\n",zStrtok(NULL,","));
printf("4 %s\n",zStrtok(NULL,","));
printf("5 %s\n",zStrtok(NULL,","));
printf("6 %s\n",zStrtok(NULL,","));
Example Output
1 A
2 B
3 ,
4 ,
5 C
6 (null)
कोड एक स्ट्रिंग प्रोसेसिंग लाइब्रेरी से है जिसे मैं जीथब पर बनाए रखता हूं , जिसे zString कहा जाता है। कोड पर एक नज़र डालें, या यहां तक कि योगदान दें :)
https://github.com/fnoyanisi/zString
strtok()
लौटने से पहले एनयूएल के साथ टोकन समाप्त करके अपने तर्क स्ट्रिंग को संशोधित करता है। यदि आप संपूर्ण बफ़र (str []) की जांच करने का प्रयास करते हैं, तो आप देखेंगे कि इसे लगातार कॉल के बीच संशोधित किया जा रहा हैstrtok()
।