strtok函式的使用
阿新 • • 發佈:2018-12-04
函式形式:
#include <string.h>
char *strtok(char *str, const char *delim);
作用:
根據某個定界附,將字串分解成多個部分。
方法:
第一次呼叫該函式時,輸入為str,後面再呼叫該函式時,str為NULL。當分解完成後,函式返回NULL。
一個分解字串,並記錄分解次數的例子:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char *str = "a b c de"; //元素值不可變
char *t; //定義一新指標,可以改變其中元素的值
char *delimiter = " "; //定界附
int i = 0;
int numtoken; //儲存分割元素的個數
char **p; //儲存分割的字串
t = malloc(strlen(str) + 1); //由於strlen不計算/0,所以所求字串長度需要加一
printf("len_of_str:%ld\n", strlen(str));
strcpy(t, str);
//計數
if (strtok(t, delimiter) != NULL)
for(numtoken = 1; strtok(NULL, delimiter) != NULL; numtoken++ );
printf("numtoken:%d\n", numtoken);
//為二重指標分配空間
p = malloc(sizeof(char *) * numtoken + 1);
strcpy(t, str);
printf("t: %s\n", t);
//賦值
*p = strtok(t, delimiter);
for(i = 1; i < numtoken; i ++ )
{
p[i] = strtok(NULL, delimiter);
}
//列印
for(i = 0; i < numtoken; i ++ )
{
printf("%d str:%s\n", i, p[i]);
}
}
函式輸出:
len_of_str:8
t: a b c de
numtoken:4
0 str:a
1 str:b
2 str:c
3 str:de
總結:
1,第一次呼叫strtok函式時,str為待處理的字串首地址,再次呼叫時,str為NULL;
2,以strtok的返回值是否為NULL來判斷,字串變數是否還可以繼續分割;
2,初始化給字串串的時候,字串中的內容不可以更改;以陣列的形式初始化字串變數,或者採用strcpy(des, sour)的辦法,可以使字串中的變臉更改。