Untuk memahami cara strtok()
kerjanya, pertama-tama perlu diketahui apa itu variabel statis . Tautan ini menjelaskannya dengan cukup baik ....
Kunci pengoperasiannya strtok()
adalah mempertahankan lokasi pemisah terakhir antara panggilan seccessive (itulah sebabnya strtok()
terus mengurai string asli yang diteruskan ke sana ketika dipanggil dengan null pointer
panggilan berturut-turut) ..
Lihat strtok()
implementasi saya sendiri , yang disebut zStrtok()
, yang memiliki fungsi agak berbeda dari yang disediakan olehstrtok()
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;
}
Dan berikut adalah contoh penggunaan
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)
Kode ini berasal dari pustaka pemrosesan string yang saya simpan di Github , yang disebut zString. Lihat kodenya, atau bahkan berkontribusi :)
https://github.com/fnoyanisi/zString
strtok()
mengubah string argumennya dengan menghentikan token dengan NUL sebelum kembali. Jika Anda mencoba untuk memeriksa seluruh buffer (str []) Anda akan melihatnya diubah antara panggilan yang berurutan kestrtok()
.