#include <stdio.h>
#include <string.h> int main(void)
{
char s[] = "aa,bb,cc.11,22,33";
char *delim = ",."; char *s1 = s; for (;;) {
char *t = strsep(&s1, delim);
if (!t)
break;
printf("%s\n", t);
} return 0;
}

执行结果:

$ ./a.out
aa
bb
cc
11
22
33

delim 为分隔符, 如果 s 中有 delim 中任意一字符, 则将其分割为两个字符串, 并将 s 中分隔符的位置置为'\0'.

返回头地址, 每执行一次, s1指向分割的字串的后一部分.

如果 s 中有多个连续分割符, 则每次返回的都是一个 '\0'. 如:


#include <stdio.h>
#include <string.h> int main(void)
{
char s[] = "aa,bb,cc.,.,.,,11,22,33";
char *delim = ",."; char *s1 = s; for (;;) {
char *t = strsep(&s1, delim);
if (!t)
break;
printf("%s\n", t);
} return 0;
}

执行结果:

aa
bb
cc 11
22
33

strsep() 的实现中用到了 strpbrk()

       #include <string.h>

       char *strpbrk(const char *s, const char *accept);

在 s 中查在 accept 中的任意字符, 并返回 s 中该字符的位置.

所以 strsep() 可以实现为:

char *strsep(char ** __restrict s1, const char * __restrict s2)
{
register char *s = *s1;
register char *p; p = NULL;
if (s && *s && (p = strpbrk(s, s2))) {
*p++ = 0;
} *s1 = p;
return s;
}

strsep strpbrk的更多相关文章

  1. strsep和strtok_r替代strtok

    char *strtok(char *str, const char *delim) 会修改数据源.外部加锁才线程安全(strtok执行结束再解锁执行另一个strtok循环知道工作完成) 主要是以互斥 ...

  2. strtok&strsep

    strtok,strtok_r,strsep--extract tokens from strings Tje strsep() function was introduced as a replac ...

  3. sscanf、strsep

    #include <stdio.h> #include <string.h> int main() { char token[] ="abdzxbcdefgh&quo ...

  4. C/C++ 字符串分割: strtok 与 strsep 函数说明

    函数原型: char *strtok(char *s, const char *delim); char *strsep(char **s, const char *delim); 功能:strtok ...

  5. C 标准库 - string.h之strpbrk使用

    strpbrk Locate characters in string,Returns a pointer to the first occurrence in str1 of any of the ...

  6. strpbrk(), strcasecmp(), strspn()

    Linux字符比较函数: strpbrk() strcasecmp() strspn() #if _MSC_VER #define strcasecmp _stricmp //strcasecmp 找 ...

  7. PHP strpbrk() 函数

    实例 在字符串中搜索字符 "oe",并返回字符串中从指定字符第一次出现的位置开始的剩余部分: <?php高佣联盟 www.cgewang.comecho strpbrk(&q ...

  8. C语言字符串处理函数

    函数名: strcpy  功  能: 拷贝一个字符串到另一个  用  法: char *stpcpy(char *destin, char *source);  程序例:  #include < ...

  9. linnux 3

    kill [信号代码] 进程ID 以优雅的方式结束进程# kill -l PID-l选项告诉kill命令用好像启动进程的用户已注销的方式结束进程.当使用该选项时,kill命令也试图杀死所留下的子进程. ...

随机推荐

  1. 【01】let和const命令

    let和const命令   魔芋总结: 01,let声明变量,只在代码块{}内有效. 02,不存在变量提升,只能先声明,再使用.否则报错. 03,暂时性死区 如果代码块中存在let和const声明的变 ...

  2. nw.js学习地址

    http://blog.sina.com.cn/s/blog_600e56a60102vqj2.html https://github.com/nwjs/nw.js/wiki/Manifest-For ...

  3. Core Animation 动画

    Core Animation框架 Core Animation可以作用与动画视图或者其他可视元素,为你完成了动画所需的大部分绘帧工作.你只需要配置少量的动画参数(如开始点的位置和结束点的位置)即可使用 ...

  4. 指定字符串 s,返回 s 所有可能的子串,每个子串必须是一个回文(指顺读和倒读都一样的字符串)

    Given a string s, partition s such that every substring of the partition is a palindrome Return all ...

  5. APP版本升级

    /*** version_upgrade 版本升级信息表*/CREATE TABLE `version_upgrade` ( `id` smallint(4) unsigned NOT NULL AU ...

  6. AWR报告中Parse CPU to Parse Elapsd%的理解

    AWR报告中Parse CPU to Parse Elapsd%的理解   原文自:http://dbua.iteye.com/blog/827243   Parse CPU to Parse Ela ...

  7. BZOJ 3669 [Noi2014]魔法森林 ——SPFA / Link-Cut Tree

    [题目分析] 大意就是有一张图,边权有两个值,ai和bi 找到一条路径,使得路径上的max(ai)+max(bi)最小. 遇到有两个权值或者多个权值的时候,如果他们互相影响,试着用分块搞一搞. 如果互 ...

  8. 【bzoj4320】【ShangHai2006 Homework】【并查集+离线处理】

    ShangHai2006 Homework Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 918  Solved: 460[Submit][Statu ...

  9. bzoj2748 [HAOI2012]音量调节 背包

    Description 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都要改变一次音量.在演出开始之前,他已经做好了一个列表,里面写着在每首歌开始之前他想要改 ...

  10. 怎么用SQL语句查数据库中某一列是否有重复项

    SELECT 某一列, COUNT( 某一列 ) FROM 表 GROUP BY 某一列 HAVING COUNT( 某一列 ) 〉1 这样查询出来的结果, 就是 有重复, 而且 重复的数量.