c++里面,函數strtok怎么用?
strtok:
分解字符串為一組字符串。s為要分解的字符串,delim為分隔符字符串。首次調用時,s指向要分解的字符串,之后再次調用要把s設成NULL。
功能:
分解字符串為一組字符串。s為要分解的字符串,delim為分隔符字符串。
例如:strtok("abc,def,ghi",","),最后可以分割成為abc def ghi.尤其在點分十進制的IP中提取應用較多。
函數使用:
strtok函數會破壞被分解字符串的完整,調用前和調用后的s已經不一樣了。如果要保持原字符串的完整,可以使用strchr和sscanf的組合等。
c
#include<string.h>
#include<stdio.h>
int main(void)
{
char input[16]="abc,d";
char*p;
/*strtok places a NULL terminator
infront of the token,if found*/
p=strtok(input,",");
if(p)
printf("%s\n",p);
/*Acond call to strtok using a NULL
as the first parameter returns a pointer
to the character following the token*/
p=strtok(NULL,",");
if(p)
printf("%s\n",p);
return0;
}
c++
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char ntence[]="This is a ntence with 7 tokens";
cout << "The string to be tokenized is:\n" << ntence << "\n\nThe tokens are:\n\n";
char *tokenPtr=strtok(ntence,"");
while(tokenPtr!=NULL) {
cout<<tokenPtr<<'\n';
tokenPtr=strtok(NULL,"");
}
//cout << "After strtok,ntence=" << tokenPtr<<endl;return0;
}
函數第一次調用需設置兩個參數。第一次分割的結果,返回串中第一個 ',' 之前的字符串,也就是上面的程序第一次輸出abc。
第二次調用該函數strtok(NULL,","),第一個參數設置為NULL。結果返回分割依據后面的字串,即第二次輸出d。
strtok是一個線程不安全的函數,因為它使用了靜態分配的空間來存儲被分割的字符串位置
線程安全的函數叫strtok_r,ca
運用strtok來判斷ip或者mac的時候務必要先用其他的方法判斷'.'或':'的個數,因為用strtok截斷的話,比如:"192..168.0...8..."這個字符串,strtok只會截取四次,中間的...無論多少都會被當作一個key
其他相關信息
下面的說明摘自于最新的Linux內核2.6.29,說明了這個函數已經不再使用,由速度更快的strp()代替
/** linux/lib/string.c** Copyright (C) 1991, 1992 Linus Torvalds*//** stupid library routines.. The optimized versions should generally be found
* as inline code in <asm-xx/string.h>
* The are buggy as well..
* * Fri Jun 25 1999, Ingo Oer <ioe@informatik.tu-chemnitz.de>
* - Added strp() which will replace strtok() soon (becau strp() is
* reentrant and should be faster). U only strp() in new code, plea.
** * Sat Feb 09 2002, Jason Thomas <jason@topic.com.au>,
* Matthew Hawkins <matt@mh.dropbear.id.au>
* - Kisd strtok() goodbye
*/
C語言中strtok用法
一般來說,條件關鍵詞(if
el
el
if
for
while)只能作用于
緊隨其后的
第一句
代碼。
{
}的作用,你可以這么理解:是把‘被
括起來
的所有代碼’
當成
‘一句代碼’
送給關鍵詞來處理。
注意:被括起來的可以是多句,當然也可以是一句哦。
if(a
==
b)
printf(
"a
==
b");
printf(
"a
!>
&&
a
!<b
");
這個時候
第二個
printf
對
if
來說不是緊隨的第一句所以不受if
限制。一定會輸出。
if(a
==
b)
{
printf(
"a
==
b");
printf(
"a
!>
&&
a
!<b
");
}
這個時候,整個大括號里的(兩句
printf)就是
緊隨
if
的第一句代碼了。
C語言中strtok用法
strtok函數會破壞被分解字符串的完整,調用前和調用后的s已經不一樣了。如果要保持原字符串的完整,可以使用strchr和sscanf的組合等。
strtok是一個線程不安全的函數,因為它使用了靜態分配的空間來存儲被分割的字符串位置
線程安全的函數叫strtok_r,ca。
運用strtok來判斷ip或者mac的時候務必要先用其他的方法判斷'.'或':'的個數,因為用strtok截斷的話,比如:"192..168.0...8..."這個字符串,strtok只會截取四次,中間的...無論多少都會被當作一個key。
函數strtok保存string中標記后面的下一個字符的指針,并返回當前標記的指針。
后面再調用strtok時,第一個參數為NULL,繼續將string標記化。NULL參數表示調用strtok繼續從string中上次調用 strtok時保存的位置開始標記化。
如果調用strtok時已經沒有標記,則strtok返回NULL。注意strtok修改輸入字符串,因此,如果調用strtok之后還要在程序中使用這個字符串,則應復制這個字 符串。
求大神講一下strtok函數用法!!
原型:char *strtok(char s[], const char *delim);
作用:分解字符串為一組字符串。s為要分解的字符串,delim為分隔符字符串。
我不知道這個函數是干什么的 我查了一下百度百科 里面有一句“strtok函數會破壞被分解字符串的完整,調用前和調用后的s已經不一樣了。如果要保持原字符串的完整,可以使用strchr和sscanf的組合等。”
所以我寫了這段代碼
char *p;
char str[]="123,456,789";
p=strtok(str,",");
printf("%s\n",p);
printf("%s\n",str);
p=strtok(NULL,",");
printf("%s\n",p);
printf("%s\n",str);
輸出是:123
123
456
123
所以我可以得出結論 在第一次調用的時候str已經被破壞了(估計是把逗號換成\0了) 如果你還想使用它要用NULL做參數
C語言strtok函數能過濾換行符或者回車符嗎
strtok函數能夠過濾換行符或者回車符,只要分割字符串delim中包含字符"
"即可。
1、strtok函數:
原型:char *strtok(char s[], const char *delim);
功能:將一個字符串分解為一組字符串,s為要分解的字符串,delim為分隔符字符串;
說明:當strtok函數在參數s的字符串中發現參數delim中包含的分割字符時,則會將該字符改為 字符。在第一次調用時,strtok()必需給予參數s字符串,往后的調用則將參數s設置成NULL。每次調用成功則返回指向被分割出片段的指針;
返回值:從字符串s開頭開始的一個個被分割的字符串。分割結束時,返回NULL。所有delim中包含的字符都會被濾掉,并將被濾掉的地方設為一處分割的節點;
2、例程:
#include<string.h>
#include<stdio.h>
intmain(){
charinput[16]="abc,d,ef,g";//待分解字符串
char*delim=",";//分隔符字符串
char*p=strtok(input,delim);//第一次調用strtok
while(p!=NULL){//當返回值不為NULL時,繼續循環
printf("%s
",p);//輸出分解的字符串
p=strtok(NULL,delim);//繼續調用strtok,分解剩下的字符串
}
return0;
}
c++的strtok函數
strtok函數在執行的時候,會修改原本的字符串,你使用char *key,那么key指向的內容保存在文字常量區,該區的內容是不能修改的,所以會出現內存錯誤。你只要吧char *key改成char key[1024],寫一個大一點的數組就可以了