原型: char *strtok(char *s, const char *delim)
頭檔案:#include<string.h>
strtok()函數分割字元串為一組字元串。參數s為想要分割的字元串,參數delim則為分割字元串中包含的所有字元,delimiters支援多個分割符。
當strtok()在參數s的字元串中發現參數delim中包涵的分割字元時,則會将該字元改為‘\0’ 字元。
在第一次調用時,strtok()必需給予參數s字元串,之後的調用則将參數s設定成NULL,每次調用成功則傳回下一個分割後的字元串指針。
s開頭開始的一個個被分割的串。當沒有被分割的串時則傳回NULL。
所有delim中包含的字元都會被濾掉,查找分隔符字元串時,跳過連續的相同分隔符,這樣可以忽略連續分隔符之間的空串,并将被濾掉的地方設為一處分割的節點。
strtok()函數分割後會改變原字元串,使用時務必小心。
DEMO1(delim隻有一個分割字元):
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "AAA,BBB,,,CCC,DDD";
const char * delims = ",";
char * tonken;
tonken = strtok(str, delims);
while (tonken) {
printf("%s\n", tonken);
tonken = strtok(NULL, delims);
}
return 0;
}
輸出:
DEMO2(delim支援多個分割字元):
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "aaa?bbb,,,ccc,!ddd";
const char * delims = ",?!";
char * tonken;
tonken = strtok(str, delims);
while (tonken) {
printf("%s\n", tonken);
tonken = strtok(NULL, delims);
}
return 0;
}
輸出:
DEMO3(strtok會改變原字元串):
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "AAA,BBB,,,CCC,DDD";
printf("before strtok, str=%s\n",str);
const char * delims = ",";
char * tonken;
tonken = strtok(str, delims);
while (tonken) {
printf("%s\n", tonken);
tonken = strtok(NULL, delims);
}
printf("After strtok, str=%s\n", str);
return 0;
}
輸出: