From:http://www.cnblogs.com/longzhao1234/archive/2012/05/31/2528317.html
这几天处理字符串,突然遇到字符串分割问题,上网查了一些资料后,找到这两个函数,strtok与strsep函数。网上举的例子千篇一律,下面我根据函数的实现源码,记录一下使用说明,供大家讨论,欢迎大牛拍砖!PS:找个库函数源码的在线查询网站真不容易,先找到了这个http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/?cvsroot=glibc
之后,发现了经常去找软件的oschina有源码库,真是踏破铁鞋无觅处,得来全不费工夫!
http://www.oschina.net/code/explore/glibc-2.9/string/strtok.c
1 #include <stdio.h>
2 #include <string.h>
3 int main()
4 {
5 char token[] ="abdczxbcdefgh";
6 printf("%s\n",token);
7 char *tokenremain = token;
8 char *tok1 = strtok(tokenremain,"cde");
9 printf("tok1:%s\n",tok1);
10 tok1 = strtok(NULL,"cde");
11 printf("tok1:%s\n",tok1);
12 return 0;
13 }[root@ test]# ./strtok
abdczxbcdefgh
tok1:ab
tok1:zxb
总结:strtok内部记录上次调用字符串的位置,所以不支持多线程,可重入版本为strtok_r,有兴趣的可以研究一下。它适用于分割关键字在字符串之间是“单独”或是 “连续“在一起的情况。
http://www.oschina.net/code/explore/glibc-2.9/string/strsep.c
1 #include <stdio.h>
2 #include <string.h>
3
4 int main()
5 {
6 char token[] ="abdzxbcdefgh";
7 printf("%s\n",token);
8 char *tokenremain = token;
9 char *tok1 = strsep(&tokenremain,"cde");
10 printf("tok1:%s,token:%s\n",tok1,tokenremain);
11 tok1 = strsep(&tokenremain,"cde");
12 printf("tok1:%s,token:%s\n",tok1,tokenremain);
13 return 0;
14 }[root@ test]# ./strsep
abdzxbcdefgh
tok1:ab,token:zxbcdefgh
tok1:zxb,token:defgh
总结:strsep返回值为分割后的开始字符串,并将函数的第一个参数指针指向分割后的剩余字符串。它适用于分割关键字在两个字符串之间只严格出现一次的情况。
所以通过阅读函数实现源码,可以灵活运用这两个函数,为自己所用!
PS:因为函数内部会修改原字符串变量,所以传入的参数不能是不可变字符串(即文字常量区)。
如 char *tokenremain ="abcdefghij"//编译时为文字常量,不可修改。
strtok(tokenremain,"cde");
strsep(&tokenremain,"cde");
编译通过,运行时会报段错误。
分享到:
相关推荐
strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok...
C语言分隔字符串函数接口strsep int strsep(char* line, char* lines[MAXSUBSTR], char* delim) 利用strtok实现
strtok的缺陷,使用strtok_s函数更新安全度 #include "stdafx.h" #include "Windows.h" #include #include using namespace std; char string1[] = "A string\tof ,,tokens\nand some more tokens"; char ...
char *strtok(const char *strToken, const char *strDelimit) 将strToken中以字符串strDelimit进行分割.vs2010测试通过
相对于explode()来说,strtok()函数可以控制节奏。按需切割字串。
1、本文详细描述了c语言strtok函数的用法。 2、通过详细示例,让读者更直观地阅读,更清晰的理解。 3、示例代码可直接复制,编译后可直接运行。 4、根据示例以及运行结果,让读者加强记忆及理解。
习题 1、出于练习的目的,strtok和strtok_r函数非常值得自己动手实现一遍,在这个过程中不仅可以更深刻地理解这两个函数的工作原理,也为...代码是自己实现的strtok和strtok_r函数,调用和使用方法与库函数的相同。
strtok函数是字符串函数库中的一个函数,函数原型如下: char *strtok(char s[], const char *delim); 作用:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。 例如:”hello,hi:what?is!the....
strtok 实现 原代码strtok 实现 原代码strtok 实现 原代码strtok 实现 原代码strtok 实现 原代码strtok 实现 原代码strtok 实现 原代码strtok 实现 原代码strtok 实现 原代码strtok 实现 原代码
函数原型:char *strtok(char *s, const char *delim);Function:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。Description:strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串...
函数原型:char *strtok(char *s, char *delim) 功能:作用于字符串s,以delim中的字符为分界符,将s切分成一个个子串;如果,s为空值NULL,则函数保存的指针SAVE_PTR在下一次调用中将作为起始位置。
strcpy,strncpy,strcat,strncat,strcmp,strncmp,strchr,strnchr,strlen,strnlen,strspn,strpbrk,strtok,strsep,memset,bcopy,memcpy,memmove,memcmp,memscan,strstr,memchr.函数具体实现内容。对理解C语言和C编程有...
C语言常用函数库详细的使用说明 字符串函数 bcmp bcopy bzero memccpy memchr memcmp memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn ...
原字符串中包含浮点数、逗号、字符串、整数,长整型数等,本程序实现的是取出其中的浮点数和长整型数
这个例子从文本文件ad9361.txt一行一行读取数据,通过spi设置寄存器值。支持命令读写:spidev_test -r F1 -w A0,-r参数表示寄存器地址,-w表示要写入的值,均为16进制(不要加0x开头)
strtok strupr 数学函数 abs acos asin atan atan2 ceil cos cosh exp fabs floor fmod frexp hypot ldexp log log10 modf pow pow10 sin sinh sqrt tan tanh 输入输出函数 ...
strtok使用範例,可幫助C之初學者對程式學習上有些許幫助。 建議軟體VS 2005/2008