strtok और Tokenizing
Strings विभाजित करना
strtok और Tokenizing, CoddyKit पर C Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
Tokenizing क्या है
Tokenizing का अर्थ है किसी स्ट्रिंग को delimiter characters से अलग हुए छोटे हिस्सों (tokens) में बाँटना।
उदाहरण के लिए, "a,b,c" को commas पर बाँटने से a, b और c tokens मिलते हैं। C इसके लिए strtok देता है।
#include <stdio.h>
#include <string.h>
int main(void) {
char text[] = "a,b,c";
char *token = strtok(text, ",");
printf("First token: %s\n", token);
return 0;
}strtok का signature
char *strtok(char *str, const char *delim);
पहली call में आप स्ट्रिंग देते हैं। बाद की calls में NULL देते हैं, ताकि यह वहीं से जारी रखे जहाँ पिछली बार रुका था। यह अगला token लौटाता है, या काम पूरा होने पर NULL।
#include <stdio.h>
#include <string.h>
int main(void) {
char text[] = "red green blue";
char *tok = strtok(text, " ");
while (tok != NULL) {
printf("%s\n", tok);
tok = strtok(NULL, " ");
}
return 0;
}strtok स्ट्रिंग बदलता है
महत्वपूर्ण: strtok मूल स्ट्रिंग को बदलता है। यह हर delimiter को '\0' से बदल देता है और उसी buffer के अंदर के pointers लौटाता है।
इसलिए आप "a,b" जैसे string literal को tokenize नहीं कर सकते, क्योंकि वह read-only होता है।
#include <stdio.h>
#include <string.h>
int main(void) {
char data[] = "x:y:z";
strtok(data, ":");
printf("data[1] is now: %d (the null byte)\n", data[1]);
return 0;
}लिखने योग्य copy बनाएँ
क्योंकि strtok अपने input को नष्ट कर देता है, यदि आपको मूल स्ट्रिंग बाद में चाहिए तो पहले उसकी copy बनाएँ।
स्थानीय char array इस्तेमाल करें या strcpy से उसे buffer में copy करें।
#include <stdio.h>
#include <string.h>
int main(void) {
const char *original = "one-two-three";
char copy[64];
strcpy(copy, original);
char *tok = strtok(copy, "-");
while (tok) {
printf("%s\n", tok);
tok = strtok(NULL, "-");
}
printf("Original intact: %s\n", original);
return 0;
}एकाधिक delimiters
delim argument characters का एक set है, कोई sequence नहीं। Set का कोई भी character separator की तरह काम करता है।
इसलिए " ,;" spaces, commas और semicolons पर एक साथ विभाजित करता है।
#include <stdio.h>
#include <string.h>
int main(void) {
char text[] = "a,b;c d";
char *tok = strtok(text, ",; ");
while (tok) {
printf("[%s]\n", tok);
tok = strtok(NULL, ",; ");
}
return 0;
}लगातार आने वाले delimiters
strtok, delimiters के लगातार समूह को एक ही separator मानता है और खाली tokens को छोड़ देता है।
इसलिए "a,,b" से केवल a और b मिलते हैं; बीच में खाली token नहीं मिलता। CSV parsing में empty fields महत्वपूर्ण हों तो इसे ध्यान में रखें।
#include <stdio.h>
#include <string.h>
int main(void) {
char text[] = "a,,b";
char *tok = strtok(text, ",");
while (tok) {
printf("token: %s\n", tok);
tok = strtok(NULL, ",");
}
return 0;
}Tokens गिनना
एक आम काम यह गिनना है कि किसी स्ट्रिंग में कितने tokens हैं। Loop के अंदर counter बढ़ाएँ।
#include <stdio.h>
#include <string.h>
int main(void) {
char sentence[] = "the quick brown fox";
int count = 0;
char *tok = strtok(sentence, " ");
while (tok) {
count++;
tok = strtok(NULL, " ");
}
printf("Word count: %d\n", count);
return 0;
}strtok छिपी हुई state रखता है
strtok अपनी position एक static internal variable में रखता है। इसी कारण NULL पिछली स्ट्रिंग से आगे जारी रखता है।
इसका नुकसान यह है कि यह reentrant नहीं है और thread-safe भी नहीं है। आप एक साथ दो स्ट्रिंग tokenize नहीं कर सकते।
#include <stdio.h>
#include <string.h>
int main(void) {
char a[] = "1 2";
char *t = strtok(a, " ");
printf("%s\n", t);
t = strtok(NULL, " ");
printf("%s\n", t);
return 0;
}Tokens store करना
विभाजन के बाद tokens का उपयोग करने के लिए लौटाए गए pointers को एक array में store करें। वे (अब बदले हुए) source buffer के अंदर point करते हैं, इसलिए buffer जीवित रहना चाहिए।
#include <stdio.h>
#include <string.h>
int main(void) {
char csv[] = "name,age,city";
char *fields[10];
int n = 0;
char *tok = strtok(csv, ",");
while (tok && n < 10) {
fields[n++] = tok;
tok = strtok(NULL, ",");
}
for (int i = 0; i < n; i++)
printf("Field %d: %s\n", i, fields[i]);
return 0;
}Reentrant विकल्प
POSIX strtok_r देता है, जो छिपी हुई state के बजाय स्पष्ट char **saveptr लेता है। इससे इसे calls के अंदर और threads में सुरक्षित रूप से इस्तेमाल किया जा सकता है।
Portable standard C के लिए single-pass parsing में साधारण strtok पर्याप्त है।
#include <stdio.h>
#include <string.h>
int main(void) {
char text[] = "p:q:r";
char *save;
char *tok = strtok_r(text, ":", &save);
while (tok) {
printf("%s\n", tok);
tok = strtok_r(NULL, ":", &save);
}
return 0;
}व्यावहारिक उपयोग: path विभाजित करना
File paths जैसे structured text को parse करते समय tokenizing बहुत उपयोगी है। / पर विभाजित करने से path का प्रत्येक component दिखाई देता है।
#include <stdio.h>
#include <string.h>
int main(void) {
char path[] = "usr/local/bin";
char *part = strtok(path, "/");
while (part) {
printf("-> %s\n", part);
part = strtok(NULL, "/");
}
return 0;
}त्वरित जाँच
strtok के काम करने के तरीके की अपनी समझ जाँचें।
पुनरावलोकन
आपने strtok से स्ट्रिंग को विभाजित करना सीखा:
- पहली call में स्ट्रिंग दी जाती है; बाद की calls में NULL दिया जाता है।
- यह input को बदलता है और delimiters को
'\0'से बदल देता है — read-only स्ट्रिंग की पहले copy बनाएँ। - Delimiter argument एक set है; लगातार आने वाले delimiters को एक माना जाता है।
- यह static state इस्तेमाल करता है और thread-safe नहीं है; आवश्यकता होने पर
strtok_rइस्तेमाल करें।
एआई शिक्षक के साथ C सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 39
- पाठ
- 144
अक्सर पूछे जाने वाले प्रश्न
क्या “strtok और Tokenizing” पाठ निःशुल्क है?
हाँ—“strtok और Tokenizing” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“strtok और Tokenizing” में मैं क्या सीखूँगा?
Strings विभाजित करना आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या C Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“strtok और Tokenizing” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस C Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर C Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- strlen, strcpy, strcat
- strcmp और Comparison
- strtok और Tokenizing
- memcpy और memset