函數原型:char *strtok(char *s, const char *delim);
Function:分解字符串為一組字符串。s為要分解的字符串,delim為分隔符字符串。
Description:strtok()用來將字符串分割成一個個片段。參數s指向欲分割的字符串,參數delim則為分割字符串,當strtok()在參數s的字符串中發現到參數delim的分割字符時 則會將該字符改為\0 字符。在第一次調用時,strtok()必需給予參數s字符串,往后的調用則將參數s設置成NULL。每次調用成功則返回被分割出片段的指針。
復制代碼 代碼如下:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char sentence[]="This is a sentence with 7 tokens";
cout<<"The string to be tokenized is:\n"
<<sentence<<"\n\nThe tokens are:\n\n";
char *tokenPtr=strtok(sentence," ");
while(tokenPtr!=NULL) {
cout<<tokenPtr<<'\n';
tokenPtr=strtok(NULL," ");
}
cout<<"After strtok, sentence = "<<sentence<<endl;
return 0;
}
/* 函數第一次調用需設置兩個參數。第一次分割的結果,返回串中第一個 ',' 之前的字符串,也就是上面的程序第一次輸出abc。
* 第二次調用該函數strtok(NULL,","),第一個參數設置為NULL。結果返回分割依據后面的字串,即第二次輸出d。
* strtok是一個線程不安全的函數,因為它使用了靜態分配的空間來存儲被分割的字符串位置
* 線程安全的函數叫strtok_r,ca
* 運用strtok來判斷ip或者mac的時候務必要先用其他的方法判斷'.'或':'的個數,
* 因為用strtok截斷的話,比如:"192..168.0...8..."這個字符串,strtok只會截取四次,中間的...無論多少都會被當作一個key
*/