分割字符串c语言strsep,C语言 字符串切割

#include

#include

#include

/* 字符串切割函数 */

/*

知识补充:

1. 函数原型:

char *strtok(char *str, const char *delim);

char *strsep(char **stringp, const char *delim);

2. 功能:

strtok和strsep两个函数的功能都是用来分解字符串为一组字符串。str为要分解的字符串,delim为分隔符字符串。

3. 参数说明:

str(stringp)要求不可以是 const char *,因为 strtok 或者 strsep 都会修改 str 的值(修改指针的值)

delim 可以多个字符的集合,strtok(strsep)会按单个字符切割子串

4. 返回值:

从str开头开始的第一个子串,当没有分割的子串时返回NULL。

5. 相同点:

两者都会改变源字符串,想要避免,可以使用strdupa(由allocate函数实现)或strdup(由malloc函数实现)。

6. 不同点:

a. strtok函数第一次调用时会把s字符串中所有在delim中出现的字符替换为NULL。然后通过依次调用strtok(NULL, delim)得到各部分子串。

b. strsep函数第一次调用时会把s字符串中所有在delim中出现的字符替换为'\0'。然后通过依次调用strtok(stringp, delim)得到各部分子串。

c. strsep在切割字符串的过程中,可能多次返回空字符串('\0'),但是 strtok 只会在结束时才返回 NULL

d. strtok 内部记录上次调用字符串的位置,所以不支持多线程,可重入版本为strtok_r

e. strsep支持多线程

*/

void test()

{

char p[] = "hello this world . the world is good .";

char *pcIndex = p;

char *token = NULL;

while (token = strsep(&buf, ". "), token)

{

//*token 可能会等于 '\0'

if (*token)

{

printf("--[%s]---[%p]---buf[%p]--\n", token, token, buf);

}

}

}

int main()

{

test();

return ;

}

C语言字符串操作总结大全(超详细)

本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作  strcpy(p, p1) 复制字符串  strncpy(p, p1, n) 复制指定长度字符串  strcat( ...

C语言字符串拷贝

C语言字符串拷贝利用指针操作,要清楚知道指针的指向 代码如下: #include #include #include

C语言字符串长度(转)

C语言字符串长度的计算是编程时常用到的,也是求职时必考的一项. C语言本身不限制字符串的长度,因而程序必须扫描完整个字符串后才能确定字符串的长度. 在程序里,一般会用strlen()函数或sizeof ...

C语言字符串操作常用库函数

C语言字符串操作常用库函数 *********************************************************************************** 函数 ...

c语言字符串操作大全

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

转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文

转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...

C 语言字符串连接的 3种方式

C 语言字符串连接的 3种方式 #include #include #include char *join ...

C语言字符串声明

重新学习C语言字符串声明char *a="nihao";char a[]="nihao";什么区别?前者定义的是指针,并且指向字符串常量“nihao”,后者是字 ...

oracle 字符串切割成结果集方法

oracle字符串切割几种方式 方法一: SELECT COLUMN_VALUE FROM TABLE(SYS.ODCIVARCHAR2LIST('1','2','3','4','5')); 方法二: ...

随机推荐

MVC程序中实体框架的Code First迁移和部署

01. 启用迁移 [在控制台中,输入以下命令:]enable-migrations  //命令将在项目中创建一个迁移文件夹.同时文件夹中包含一个Configuration.cs文件,你可以编辑该文件来 ...

报错:No package erlang available

问题 yum install erlang 报错:No package erlang available 同样的,如果我们在安装nginx的时候出现"No package nginx ava ...

spring mvc为何多注入了个SimpleUrlHandlerMapping?

最近在调试项目时,debug DispatcherServlet时,发现handlerMappings属性包含了RequestMappingHandlerMapping.SimpleUrlHandle ...

结合源码看nginx-1.4.0之nginx全局变量ngx_cycle初始化详解

目录 0. 摘要 1. ngx_cycle_t结构设计 2. ngx_cycle_t数据结构 3. nginx全局变量ngx_cycle初始化 4. 小结 5. 参考资料 0. 摘要 Nginx核心的 ...

java_泛型(构造器)部分实例

package ming; import java.util.ArrayList; import java.util.Collection; import java.util.List; class ...

XJOI网上同步训练DAY1 T2

思路:似曾相识?...见http://www.cnblogs.com/qzqzgfy/p/5266874.html 一看时限还是4s!,于是就开开心心地打了70%的分,就是用容斥原理,就可以n^3解决 ...

getDeclaredFields()和getFields()

getFields()获得某个类额的所有的公共(public)的字段,包括父类. getDeclaredFields()获得某个类的所有申明的字段,即包括public.private和proteced ...

Junit4学习(四)Junit4常用注解

一,背景知识: 由前面的知识可以知道: /*     * @Test:将一个普通方法修饰为一个测试方法     *   @Test(exception=XXX.class)     *   @Test ...

Spring Cloud(Dalston.SR5)--Zuul 网关

我们使用 Spring Cloud Netflix 中的 Eureka 实现了服务注册中心以及服务注册与发现:而服务间通过 Ribbon 或 Feign 实现服务的消费以及均衡负载:使用Hystrix ...

nodes 验证码

一个常见的需求. 知乎上得讨论:http://www.zhihu.com/question/32156977 node-canvas 在mac上安装有问题,可能是我没有sudo 使用了ccap:挺不错 ...

你可能感兴趣的:(分割字符串c语言strsep)