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\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的更多相关文章
- strsep和strtok_r替代strtok
char *strtok(char *str, const char *delim) 会修改数据源.外部加锁才线程安全(strtok执行结束再解锁执行另一个strtok循环知道工作完成) 主要是以互斥 ...
- strtok&strsep
strtok,strtok_r,strsep--extract tokens from strings Tje strsep() function was introduced as a replac ...
- sscanf、strsep
#include <stdio.h> #include <string.h> int main() { char token[] ="abdzxbcdefgh&quo ...
- C/C++ 字符串分割: strtok 与 strsep 函数说明
函数原型: char *strtok(char *s, const char *delim); char *strsep(char **s, const char *delim); 功能:strtok ...
- C 标准库 - string.h之strpbrk使用
strpbrk Locate characters in string,Returns a pointer to the first occurrence in str1 of any of the ...
- strpbrk(), strcasecmp(), strspn()
Linux字符比较函数: strpbrk() strcasecmp() strspn() #if _MSC_VER #define strcasecmp _stricmp //strcasecmp 找 ...
- PHP strpbrk() 函数
实例 在字符串中搜索字符 "oe",并返回字符串中从指定字符第一次出现的位置开始的剩余部分: <?php高佣联盟 www.cgewang.comecho strpbrk(&q ...
- C语言字符串处理函数
函数名: strcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #include < ...
- linnux 3
kill [信号代码] 进程ID 以优雅的方式结束进程# kill -l PID-l选项告诉kill命令用好像启动进程的用户已注销的方式结束进程.当使用该选项时,kill命令也试图杀死所留下的子进程. ...
随机推荐
- Service Broadcast简单音乐播放功能
在Activity上有两个ImageButton,分别控制播放/暂停.停止. @Override public void onCreate(Bundle savedInstanceState) ...
- 【SVN】http和https的区别
导读:输入网址的时候,经常输入http://什么什么的,但http是什么,一直都不知道.然后,这回在SVN的学习中,又出现了http和https,而且还有说https的8443端口相对优越,我就在想, ...
- 【Android】自定义Dialog
先上图 main.xml主界面文件 <?xml version="1.0" encoding="utf-8"?><LinearLayout x ...
- 【Luogu】P1122最大子树和(DFS,树上DP)
题目链接 感觉自己DP好烂啊 道道看题解 钦定1为根,DFS搜索子树权值.如果子树权值大于0就将当前节点加上子树权值,反之就把子树扔掉.最后在所有节点的权值中寻找最优解. void dfs(int ...
- BZOJ 1086 [SCOI2005]王室联邦 ——DFS
手把手教你树分块系列. 只需要记录一个栈,如果等于B的情况就弹栈,令省会为当前节点. 然后把待分块的序列不断上传即可. 考虑到有可能弹出不是自身节点的子树节点,所以记录一下当前的栈底. DFS即可 # ...
- SGU 275 To xor or not to xor【最大xor和 高斯消元】
题目大意:给你n个数(n<=100)要你找出若干个数使他们的异或和最大 思路:高斯-若当消元消完以后削成若干个独立的行向量,将它们异或起来就好 #include<cstdio> #i ...
- BZOJ2244 [SDOI2011]拦截导弹 【cdq分治 + 树状数组】
题目 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度.并且能够拦截任意速度的导弹,但是以后每一发炮弹都不能高于前一发的高度,其 ...
- Uva5009 Error Curves
已知n条二次曲线si(x) = ai*x^2 + bi*x + ci(ai ≥ 0),定义F(x) = max{si(x)},求出F(x)在[0,1000]上的最小值. 链接:传送门 分析:最大值最小 ...
- 【shell】shell编程(一)-入门
如今,不会Linux的程序员都不意思说自己是程序员,而不会shell编程就不能说自己会Linux.说起来似乎shell编程很屌啊,然而不用担心,其实shell编程真的很简单.背景 什么是shell编程 ...
- zoj 3812 We Need Medicine (dp 状压)
先贴一下转载的思路和代码,,,:http://blog.csdn.net/qian99/article/details/39138329 状压dp博大精深啊,以后看到n<=50都可以往状压上想, ...