zoukankan      html  css  js  c++  java
  • strsep strpbrk

    #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
    ", t);
    	}
    
    	return 0;
    }
    

    执行结果:

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

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

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

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

    
    #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
    ", 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;
    }
    
  • 相关阅读:
    HiveQL:数据定义
    linux学习整理
    Hive中问题解决整理
    Hive 数据类型和文件格式
    neo4j 简要安装步骤
    Leetcode 刷题笔记二 两数相加(使用链表) -- scala版本
    leetcode 刷题笔记一 两数之和 scala版本
    windows 安装 tensorflow
    elemnetui 下载,及引用
    cenos7 安装mysql
  • 原文地址:https://www.cnblogs.com/sammei/p/4142955.html
Copyright © 2011-2022 走看看