本文目錄一覽:
- 1、c++裡面,函數strtok怎麼用?
- 2、關於c語言字符串中切割函數strtok的用法
- 3、我想用c語言中的strtok函數得到一個字符串中由分隔符分割的某些關鍵字,並處理
- 4、請問,C語言中,對帶分隔符的字符串如何分割?
- 5、C語言中strtok用法
c++裡面,函數strtok怎麼用?
strtok:
分解字符串為一組字符串。s為要分解的字符串,delim為分隔符字符串。首次調用時,s指向要分解的字符串,之後再次調用要把s設成NULL。
功能:
分解字符串為一組字符串。s為要分解的字符串,delim為分隔符字符串。
例如:strtok(“abc,def,ghi”,”,”),最後可以分割成為abc def ghi.尤其在點分十進制的IP中提取應用較多。
函數使用:
strtok函數會破壞被分解字符串的完整,調用前和調用後的s已經不一樣了。如果要保持原字符串的完整,可以使用strchr和sscanf的組合等。
c
#includestring.h
#includestdio.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);
/*Asecond 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++
#includeiostream
#includecstring
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) {
couttokenPtr’\n’;
tokenPtr=strtok(NULL,””);
}
//cout “After strtok,sentence=” tokenPtrendl;return0;
}
函數第一次調用需設置兩個參數。第一次分割的結果,返回串中第一個 ‘,’ 之前的字符串,也就是上面的程序第一次輸出abc。
第二次調用該函數strtok(NULL,”,”),第一個參數設置為NULL。結果返回分割依據後面的字串,即第二次輸出d。
strtok是一個線程不安全的函數,因為它使用了靜態分配的空間來存儲被分割的字符串位置
線程安全的函數叫strtok_r,ca
運用strtok來判斷ip或者mac的時候務必要先用其他的方法判斷’.’或’:’的個數,因為用strtok截斷的話,比如:”192..168.0…8…”這個字符串,strtok只會截取四次,中間的…無論多少都會被當作一個key
其他相關信息
下面的說明摘自於最新的Linux內核2.6.29,說明了這個函數已經不再使用,由速度更快的strsep()代替
/** 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
* These are buggy as well..
* * Fri Jun 25 1999, Ingo Oeser ioe@informatik.tu-chemnitz.de
* – Added strsep() which will replace strtok() soon (because strsep() is
* reentrant and should be faster). Use only strsep() in new code, please.
** * Sat Feb 09 2002, Jason Thomas jason@topic.com.au,
* Matthew Hawkins matt@mh.dropbear.id.au
* – Kissed strtok() goodbye
*/
關於c語言字符串中切割函數strtok的用法
strtok()函數並不像你想的那樣可以一次切割字串。需要多次循環,第二次時需要用 p = strtok(NULL, ” “); 這樣的 形式。
void main()
{ char test1[] = “Hello C World”;
char *p;
p = strtok(test1, ” “);
while(p)
{
printf(“%s\n”, p);
p = strtok(NULL, ” “);
}
return 0;
}
運行結果:
Hello
C
World
我想用c語言中的strtok函數得到一個字符串中由分隔符分割的某些關鍵字,並處理
#include stdio.h
#include string.h
int main(void)
{
char str[100], spl[10], *p;
fputs(“請輸入字符串 : “, stdout);
gets(str);
fputs(“請輸入分割符 : “, stdout);
gets(spl);
p = strtok(str, spl);
while (p != NULL)
{
puts(p);
p = strtok(NULL, spl);
}
return 0;
}
請問,C語言中,對帶分隔符的字符串如何分割?
C/C++中的Split函數是strtok()其函數原型如下:
char
*
strtok
(char
*
str,
const
char
*
delimiters);
函數說明
strtok()用來將字符串分割成一個個片段。參數str指向欲分割的字符串,參數delimiters則為分割字符串,當strtok()在參數str的字符串中發現到參數delimiters的分割字符時則會將該字符改為’\0’字符。在第一次調用時,strtok()必需給予參數str字符串,往後的調用則將參數str設置成NULL。每次調用成功則返回下一個分割後的字符串指針。
返回值
返回下一個分割後的字符串指針,如果已無從分割則返回NULL。
示例-1
/*
strtok
example
*/
#include
stdio.h
#include
string.h
int
main
()
{
char
str[]
=”a,b,c,d*e”;
const
char
*
split
=
“,”;
char
*
p;
p
=
strtok
(str,split);
while(p!=NULL)
{
printf
(“%s\n”,p);
p
=
strtok(NULL,split);
}
getchar();
return
0;
}
本例中,實現對字符串’a,b,c,d*e”用逗號(,)來作界定符對字符串進行分割。
輸出結果將如下所示:
a
b
c
d*e
因為delimiters支持多個分割符,
我們將本示例中的語句行
const
char
*
split
=
“,”;
改成
const
char
*
split
=
“,*”;
//用逗號(,)和星號(*)對字符串進行分割
這樣輸出結果將如下所示:
a
b
c
d
e
C語言中strtok用法
一般來說,條件關鍵詞(if
else
else
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
的第一句代碼了。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/272475.html