这几天处理字符串,突然遇到字符串分割问题,上网查了一些资料后,找到这两个函数,strtok与strsep函数。网上举的例子千篇一律,下面我根据函数的实现源码,记录一下使用说明,供大家讨论,欢迎大牛拍砖!PS:找个库函数源码的在线查询网站真不容易,先找到了这个http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/?cvsroot=glibc
之后,发现了经常去找软件的oschina有源码库,真是踏破铁鞋无觅处,得来全不费工夫!
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,有兴趣的可以研究一下。它适用于分割关键字在字符串之间是“单独”或是 “连续“在一起的情况。
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()的时候,可以发现,在分割标志的时候,并不是一个全部匹配:
1 #include<string.h>
2 #include<stdio.h>
3 int main(void)
4 {
5 char input[16]="zhong guo ren";
6 char *p;
7 p=strtok(input," \n");
// p=strtok(input," \n");
8 while(p) 9 { 10 printf("%s\r\n",p); 11 p=strtok(NULL," \n"); 12 } 13 return 0; 14 }~ ~
如果将第七行该为下面注释的一行,那么不可以将三个单词分析分开来
但是如果是第七行修改而11行不修改 运行结果就知道是怎么个情况了!!!!
分享到:
相关推荐
C++字符串分割源码,破解版VC助手,兼容多个windows版本
strcpy,strncpy,strcat,strncat,strcmp,strncmp,strchr,strnchr,strlen,strnlen,strspn,strpbrk,strtok,strsep,memset,bcopy,memcpy,memmove,memcmp,memscan,strstr,memchr.函数具体实现内容。对理解C语言和C编程有...
一、用strtok函数进行字符串分割 原型: char *strtok(char *str, const char *delim); 功能:分解字符串为一组字符串。 参数说明:str为要分解的字符串,delim为分隔符字符串。 返回值:从str开头开始的一个个被...
C语言分隔字符串函数接口strsep int strsep(char* line, char* lines[MAXSUBSTR], char* delim) 利用strtok实现
这个例子从文本文件ad9361.txt一行一行读取数据,通过spi设置寄存器值。支持命令读写:spidev_test -r F1 -w A0,-r参数表示寄存器地址,-w表示要写入的值,均为16进制(不要加0x开头)
* 使用一个字符串分割另一个字符串 * * @param delimiter 边界上的分隔字符 * @param haystack 输入的字符串 * @param out 输出的字符串指针 * @return 分割成了多少个成员 */ int explode(char *delimiter, ...
strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok函数的用法strtok...
1、问题引入 自己在写一个linux下的模拟执行指令...2、自己写的字符串分割函数:用于分割指令,比如cat a.c最后会被分割成cat和a.c两个字符串、mv a.c b.c最后会被分割成mv和a.c和b.c三个字符串。 具体实现如下: #inc
一、用strtok函数进行字符串分割 原型: char *strtok(char *str, const char *delim); 功能:分解字符串为一组字符串。 参数说明:str为要分解的字符串,delim为分隔符字符串。 返回值:从str开头开始的一个个被...
字符串相关函数介绍,strchr ,strstr,strtok
功能效果与strtok函数一样,但是效率极高,只要遍历一次字符串,就可以把字符串分割开,效率高于strtok
这些是常用的字符串操作函数,有些和C中的同名函数意义完全一致. strrev是把一个字符串翻转. strtolower和strtoupper的意思应该不用解释了. ucfirst是把字符串的第一个字符变成大写. substr是返回字符串的一个...
C语言strlen()函数:返回字符串的长度 头文件: #include strlen()函数用来计算字符串的长度,其原型为: unsigned int strlen (char *s); 【参数说明】s为指定的字符串。 strlen()用来计算指定的字符串s 的...
一、用 strtok 函数进行字符串分割 二、用 STL 进行字符串的分割 三、用 Boost 进行字符串的分割
原字符串中包含浮点数、逗号、字符串、整数,长整型数等,本程序实现的是取出其中的浮点数和长整型数
主要介绍 strcpy(),strncpy(), strcat(), strncat(), strcmp(), strncmp(), strchar(), strrchr(), strspn(), strcspn(), strpbrk(), strstr(), strlen(), strerror(), strtok()等。
char *strtok(const char *strToken, const char *strDelimit) 将strToken中以字符串strDelimit进行分割.vs2010测试通过
将字符串str_sou接在字符串str_des后面(放在str_des的最后字符和“\0”之间)。 注意不要越界,可用strlen(input)函数求字符串长度之后再拼接。 2. 字符串的分割 使用c的函数 char *strtok(char *str_sou,constchar...