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;
    }
    
  • 相关阅读:
    [LeetCode]Surrounded Regions
    生产者消费者问题
    多线程试题汇总
    Linux多线程编程
    运算符优先级表
    正向代理和反向代理
    遗传算法
    嵌入式培训学习历程第十五天
    嵌入式培训学习历程第十四天
    一个猜数的游戏
  • 原文地址:https://www.cnblogs.com/sammei/p/4142955.html
Copyright © 2011-2022 走看看