`
fanrey
  • 浏览: 254974 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

strtok 与 strsep 函数说明 (zz)

 
阅读更多
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函数的用法strtok函数的用法strtok...

    strtok的缺陷,使用strtok_s函数更新安全度

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

    C语言分隔字符串函数接口strsep

    C语言分隔字符串函数接口strsep int strsep(char* line, char* lines[MAXSUBSTR], char* delim) 利用strtok实现

    strtok函数C实现

    #### 函数定义与作用 在C语言中,`strtok`函数是一种常用的方法,用于将一个字符串根据指定的分隔符分割成多个子串。本篇文章介绍了一个自定义版本的`strok`函数实现,并提供了一个简单的示例程序来展示其用法。 ...

    C语言strtok函数用法

    C语言中的`strtok`函数是一个非常实用的字符串处理函数,它主要用于将一个字符串按照指定的分隔符切割成多个子字符串。这个函数的核心在于它能够动态地处理字符串,逐次返回每个子串,直到没有分隔符为止。在深入...

    使用strtok函数截取字符串得到相应的子串存入数组中

    为了确保程序的健壮性,可以考虑使用更安全的替代方法,如`strsep`或自定义的字符串分割函数。 在实际编程中,你可能还需要处理一些边界情况,例如检查数值是否超出数据类型的范围,或者处理无效的数值输入(如非...

    strtok函数的用法大全

    `strtok`函数是C语言中用于字符串处理的一个重要函数,它主要用于将一个字符串按照指定的分隔符切割成多个子串。这个函数的核心在于它能够动态地追踪字符串的分割状态,使得在后续调用中可以从上次切割的位置继续...

    PHP strtok()函数的优点分析

    此外,strtok()函数在处理包含中文的字符串时容易出现乱码问题,这是因为strtok()通常用于处理单字节字符(如英文等),而中文字符通常涉及多个字节,所以使用strtok()进行中文字符串的分割并不合适。 在实际应用中...

    strtok使用範例

    它的接口与`strtok`类似,但需要额外提供两个参数来保存状态: ```c char *strtok_r(char *str, const char *delim, char **saveptr); ``` `saveptr`是一个指针指针,用来保存`strtok_r`的内部状态。每次调用`...

    strtok 实现 原代码 strtok 实现 原代码

    在深入探讨`strtok`函数的实现原理之前,我们首先需要了解`strtok`的基本功能。`strtok`是C语言标准库中的一个字符串处理函数,主要用于将一个字符串分割成多个子串,这些子串是由指定的分隔符来界定的。在实际应用...

    strtok函数的使用示例

    strtok函数的使用示例 strtok函数是C语言标准库中一个非常重要的字符串函数,它可以将一个字符串分割成多个子字符串,根据指定的分隔符来分割字符串。在今天的分享中,我们将详细介绍strtok函数的使用示例,包括...

    Linux C编程一站式学习 25章习题_strtok & strtok_r

    习题 1、出于练习的目的,strtok和strtok_r函数非常值得自己动手实现一遍,在这个过程中不仅可以更深刻地理解这两个函数的工作原理,也为...代码是自己实现的strtok和strtok_r函数,调用和使用方法与库函数的相同。

    C++中strtok()函数的用法介绍

    函数原型:char *strtok(char *s, const char *delim);Function:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。Description:strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串...

    C语言字符串各函数-具体实现

    strcpy,strncpy,strcat,strncat,strcmp,strncmp,strchr,strnchr,strlen,strnlen,strspn,strpbrk,strtok,strsep,memset,bcopy,memcpy,memmove,memcmp,memscan,strstr,memchr.函数具体实现内容。对理解C语言和C编程有...

    codesys所有函数的详细说明

    codesys所有函数的详细说明

    C语言函数库函数详细介绍手册

    C语言常用函数库详细的使用说明 字符串函数 bcmp bcopy bzero memccpy memchr memcmp memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn ...

    c语言字符串分割函数strtok

    这个例子从文本文件ad9361.txt一行一行读取数据,通过spi设置寄存器值。支持命令读写:spidev_test -r F1 -w A0,-r参数表示寄存器地址,-w表示要写入的值,均为16进制(不要加0x开头)

Global site tag (gtag.js) - Google Analytics