c strtok(c语言中strtok的用法)

admin 315 0

大家好,关于c strtok很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于c语言中strtok的用法的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

一、C语言strtok函数能过滤换行符或者回车符吗

strtok函数能够过滤换行符或者回车符,只要分割字符串delim中包含字符"\n\r"即可。

原型:char*strtok(char s[], const char*delim);

功能:将一个字符串分解为一组字符串,s为要分解的字符串,delim为分隔符字符串;

说明:当strtok函数在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回指向被分割出片段的指针;

返回值:从字符串s开头开始的一个个被分割的字符串。分割结束时,返回NULL。所有delim中包含的字符都会被滤掉,并将被滤掉的地方设为一处分割的节点;

charinput[16]="abc,d,ef,g";//待分解字符串

char*p=strtok(input,delim);//第一次调用strtok

while(p!=NULL){//当返回值不为NULL时,继续循环

printf("%s\n",p);//输出分解的字符串

p=strtok(NULL,delim);//继续调用strtok,分解剩下的字符串

二、C语言从右到左strtok解析字符串

1、最近正好看到字符串处理函数部分,所以答一下,顺便练习。

2、思路是使用字符串数组存储分割后的字符串,知道数组大小,就可以获取最后一个/之前的字符串(即倒数第二个数组元素)。

3、C语言中没有string这个类型,要实现字符串数组可以考虑利用指针数组(其实质就是二维字符数组)。

4、#define LEN 30//指针数组的大小

5、 char str[]="ab/cds/1231/csdf/ae/qdsfa";

6、 while((token= strtok(NULL,"/"))!= NULL)

7、 printf("第一个字符串:%s\n第二个字符串:%s\n倒数第二个字符串:%s\n",\

三、C语言中strtok用法

strtok函数会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。如果要保持原字符串的完整,可以使用strchr和sscanf的组合等。

strtok是一个线程不安全的函数,因为它使用了静态分配的空间来存储被分割的字符串位置

运用strtok来判断ip或者mac的时候务必要先用其他的方法判断'.'或':'的个数,因为用strtok截断的话,比如:"192..168.0...8..."这个字符串,strtok只会截取四次,中间的...无论多少都会被当作一个key。

函数strtok保存string中标记后面的下一个字符的指针,并返回当前标记的指针。

后面再调用strtok时,第一个参数为NULL,继续将string标记化。NULL参数表示调用strtok继续从string中上次调用 strtok时保存的位置开始标记化。

如果调用strtok时已经没有标记,则strtok返回NULL。注意strtok修改输入字符串,因此,如果调用strtok之后还要在程序中使用这个字符串,则应复制这个字符串。

四、C语言strtok函数使用问题。

strtok函数会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。如果要保持原字符串的完整,可以使用strchr和sscanf的组合等。

strtok是一个线程不安全的函数,因为它使用了静态分配的空间来存储被分割的字符串位置

运用strtok来判断ip或者mac的时候务必要先用其他的方法判断'.'或':'的个数,因为用strtok截断的话,比如:"192..168.0...8..."这个字符串,strtok只会截取四次,中间的...无论多少都会被当作一个key。

函数strtok保存string中标记后面的下一个字符的指针,并返回当前标记的指针。

后面再调用strtok时,第一个参数为NULL,继续将string标记化。NULL参数表示调用strtok继续从string中上次调用 strtok时保存的位置开始标记化。

如果调用strtok时已经没有标记,则strtok返回NULL。注意strtok修改输入字符串,因此,如果调用strtok之后还要在程序中使用这个字符串,则应复制这个字符串。

五、c++中c_str()用法,越详细越好。

1、这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作。

2、c_str()函数返回一个指向正规C字符串的指针,内容与本string串相同.,这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string对象转换成c中的字符串样式。

3、注意:一定要使用strcpy()函数等来操作方法c_str()返回的指针。

4、std::cout<<c<<std::endl;//输出:1234

5、std::cout<<c<<std::endl;//输出:abcd

6、上面如果继续用c指针的话,导致的错误将是不可想象的,就如:1234变为abcd。

六、c++里面,函数strtok怎么用

分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。

分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。

例如:strtok("abc,def,ghi",","),最后可以分割成为abc def ghi.尤其在点分十进制的IP中提取应用较多。

strtok函数会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。如果要保持原字符串的完整,可以使用strchr和sscanf的组合等。

/*strtok places a NULL terminator

infront of the token,if found*/

/*Asecond call to strtok using a NULL

as the first parameter returns a pointer

to the character following the token*/

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,"");

cout<<tokenPtr<<'\n';

//cout<<"After strtok,sentence="<< tokenPtr<<endl;return0;

函数第一次调用需设置两个参数。第一次分割的结果,返回串中第一个','之前的字符串,也就是上面的程序第一次输出abc。

第二次调用该函数strtok(NULL,","),第一个参数设置为NULL。结果返回分割依据后面的字串,即第二次输出d。

strtok是一个线程不安全的函数,因为它使用了静态分配的空间来存储被分割的字符串位置

运用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>

** 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>

七、c语言 strtok请教

1、strtok每调用一次改写源串的一部分,就是说每次把一个界定符置为'\0'

2、显然首次调用就直接将所以界定符置为'\0'更容易,但作为提供给用户的库函数,在调用的时候应该给外界带来最少的附加作用;所以麻烦的只是底层的人咯

3、其实一句strtok(NULL,"?,");会有两个效果; 1是返回一个字串, 2是将字串末尾的界定符置为0;也就是说其实strtok是有副作用的...

4、//首先我想以'#'为界定符提取字串

5、//然后我又想以'?'为界定符,期望得到"ab""#de""#g"

6、//很有可能用户的一个串会多次使用

7、//解决方法是用户再准备一个拷贝串

文章到此结束,如果本次分享的c strtok和c语言中strtok的用法的问题解决了您的问题,那么我们由衷的感到高兴!