কীভাবে 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)
কোডটি একটি স্ট্রিং প্রসেসিং লাইব্রেরি থেকে আমি গিথুবে রক্ষণ করি , যাকে জেডস্ট্রিং বলে। কোডটি দেখুন বা অবদান রাখুন :)
https://github.com/fnoyanisi/zString
strtok()
ফিরে আসার আগে NUL এর সাথে টোকেন সমাপ্ত করে এর আর্গুমেন্ট স্ট্রিংটি সংশোধন করে। আপনি যদি পুরো বাফারটি পরীক্ষা করার চেষ্টা করেন (str []) আপনি দেখতে পাবেন এটি ক্রমাগত কলগুলির মধ্যে সংশোধিত হচ্ছেstrtok()
।