#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. mac osx下apache下的坑: you don’t have permission to access / on this server

    在Mac下Apache修改默认站点的目录时,遇到403错误, you don’t have permission to access / on this server 首先按照google到教程: 修 ...

  2. Leetcode 372.超级次方

    超级次方 你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出. 示例 1: 输入: a = 2, b = [3] 输出: 8 示例 2: 输入: a ...

  3. Tinkoff Challenge - Final Round (Codeforces Round #414, rated, Div. 1 + Div. 2) 继续跪一把

    这次的前三题挺简单的,可是我做的不快也不对. A. Bank Robbery time limit per test 2 seconds memory limit per test 256 megab ...

  4. 奇奇怪怪的冒泡排序 TOJ 2014: Scramble Sort

    粘贴两个特别简单的冒泡排序 2014: Scramble Sort Description In this problem you will be given a series of lists co ...

  5. 2017 Multi-University Training Contest - Team 2

    Regular polygon Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  6. JavaScript onload

     The onload event occurs immediately after a page or an image is loaded.onload事件当一个页面或是一张图片加载完成时被触发. ...

  7. 九度oj 题目1153:括号匹配问题

    题目描述: 在某个字符串(长度不超过100)中有左括号.右括号和大小写字母:规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配.写一个程序,找到无法匹配的左括号和右括 ...

  8. VM上完美运行macos

    VM上完美运行macos 作者:方辰昱 时间:十月三号 效果图 简要步骤 下载安装VM 下载镜像文件链接,darwin.iso,unlocker,beamoff.合集下载链接:https://pan. ...

  9. BZOJ 1095 [ZJOI2007]Hide 捉迷藏 ——动态点分治

    [题目分析] 这题好基啊. 先把分治树搞出来.然后每个节点两个堆. 第一个堆保存这个块里的所有点(即分治树中的所有儿子)到分治树上的父亲的距离. 第二个堆保存分治树子树中所有儿子第一个堆的最大值. 建 ...

  10. BZOJ2726 [SDOI2012]任务安排 【斜率优化 + cdq分治】

    题目 机器上有N个需要处理的任务,它们构成了一个序列.这些任务被标号为1到N,因此序列的排列为1,2,3...N.这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i ...