天天看點

VC實作字元串分割的函數strtok

原型: 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;
}
           

輸出:

VC實作字元串分割的函數strtok

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;
}
           

輸出:

VC實作字元串分割的函數strtok

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;
}
           

輸出:

VC實作字元串分割的函數strtok
VC實作字元串分割的函數strtok