strtok - 详细示例解析
定义: Defined in header <string.h>
原型: char *strtok( char *str, const char *delim );
参数: 2个都是字符串(以\0结尾)
功能描述:
该函数的功能是根据分割符分割字符串. 该函数最特殊的地方是它具有
类似"记忆"的功能, 请看下面的示例.
简单示例
#include <stdio.h>
#include <string.h>
#define LEN 100
int main (void) {
char str[LEN] = "one-two-tree-four-five";
char *res; // 保存分割后的结果(必须声明为指针的形式)
char delim[LEN] = "-"; // 分隔符
res = strtok(str, delim);
printf("%s\n", res); // one
printf("%s\n", str); // one
// 这里的原理就是把str第一个 - 替换成 \0
return 0;
}
第一个参数是NULL示例
#include <stdio.h>
#include <string.h>
#define LEN 100
int main (void) {
char str[LEN] = "one-two-tree-four-five";
char *res; // 保存分割后的结果(必须声明为指针的形式)
char delim[LEN] = "-"; // 分隔符
res = strtok(str, delim);
printf("%s\n", res); // one
printf("%s\n", str); // one
// 这里的原理就是把str第一个 - 替换成 \0
res = strtok(NULL, delim); // 这里固定用NULL, 代表接着上次继续分割
printf("%s\n", res); // two
printf("%s\n", str); // one
return 0;
}
根据指定字符分割字符串
#include <stdio.h>
#include <string.h>
#define LEN 100
int main (void) {
char str[LEN] = "one-two";
char *res; // 保存分割后的结果(必须声明为指针的形式)
char delim[LEN] = "-"; // 分隔符
// 第1次找, 返回one
res = strtok(str, delim);
puts(res);
// 第2次找, 返回two
res = strtok(NULL, delim);
if (res == NULL) {
printf("NULL\n");
} else {
puts(res);
}
// 第3次找, 返回NULL
res = strtok(NULL, delim);
if (res == NULL) {
printf("NULL\n");
} else {
puts(res);
}
return 0;
}
完整示例
#include <stdio.h>
#include <string.h>
#define LEN 100
int main (void) {
char str[LEN] = "one-two-tree-four-five";
char *res; // 保存分割后的结果(必须声明为指针的形式)
char delim[LEN] = "-"; // 分隔符
int i;
res = strtok(str, delim);
while (res != NULL) {
printf("%s\n", res);
res = strtok(NULL, delim);
}
// 人工打印str
for (i = 0; i < sizeof str; i++) {
if(str[i] == '\0' && str[i + 1] != '\0') {
printf("\\0");
} else {
printf("%c", str[i]);
}
}
/*
输出:
one
two
tree
four
five
one\0two\0tree\0four\0five\0
*/
return 0;
}
strtok - 详细示例解析的更多相关文章
- C#中的隐式类型var——详细示例解析
从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,它的具体类型由编译器根据上下文推断而出. 下面就让我来总结下隐式类型的一些特点: 1.va ...
- FAT32文件格式示例解析
1.前言 本文主要以一个示例来分析FAT32文件系统的格式,对FAT32文件系统的各个区域详细分析. 2.FAT32文件系统典型分区 3.FAT32文件系统示例 按如下步骤在ubuntu下创建FAT3 ...
- loam详细代码解析与公式推导
loam详细代码解析与公式推导(基础理论知识) 一.基础坐标变换 loam中欧拉角解算都采用R P Y 的解算方式,即先左乘R, 再左乘P, 最后左乘Y,用矩阵表示为: R = Ry * Rp * R ...
- 【极力分享】[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例【转载自https://segmentfault.com/a/1190000004152660】
[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例 本文我们来学习一下在Entity Framework中使用Cont ...
- java连接mysql数据库详细步骤解析
java连接mysql数据库详细步骤解析 第一步:下载一个JDBC驱动包,例如我用的是:mysql-connector-java-5.1.17-bin.jar 第二步:导入下载的J ...
- xml scheme 示例解析
第一个示例解析 第二个示例解析
- ZjDroid工具介绍及脱壳详细示例
前提条件: 1.Root手机一部 2.需要通过Xposed installer(http://dl.xposed.info/latest.apk)安装Xposed Framework; 一.ZjDro ...
- centos7安装zabbix3.0超详细步骤解析
centos7安装zabbix3.0超详细步骤解析 很详细,感谢作者 以下是我操作的history 622 java -version 623 javac -version 624 grep SELI ...
- virsh的详细命令解析(一)
virsh的详细命令解析 virsh 有命令模式和交互模式如果直接在vrish后面添加参数是命令模式,如果直接写virsh,就会进入交互模式 virsh list 列出所有的虚拟机,虚拟机的状态有(8 ...
随机推荐
- 修改多渠道打包的App名
archiveNameFormat = '${flavorName}-${projectName}-${versionName}-${versionCode}'
- IoC就是IoC,不是什么技术,与GoF一样,是一种设计模式。
IoC就是IoC,不是什么技术,与GoF一样,是一种设计模式. InterfaceDrivenDesign接口驱动,接口驱动有很多好处,可以提供不同灵活的子类实现,增加代码稳定和健壮性等等,但是接口一 ...
- 有关Servlet的生命周期说法正确的有( )。
A.Servlet的生命周期由Servlet实例控制 B.init()方法在创建完Servlet实例后对其进行初始化,传递的参数为实现ServletContext接口的对象 C.service()方法 ...
- java---多线程及线程的概念
如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其 ...
- Ubuntu的软件更新常识--添加软件源与ppa源
加入ppa源的命令: sudo add-apt-repository ppa:user/ppa-name 删除ppa源的命令: sudo add-apt-repository -r ppa:user/ ...
- HttpHandler简单示例
using System.Web; namespace MyWebApp { public class MyHttpHandler : IHttpHandler { public void Proce ...
- List<T>转DataTable
/// <summary> /// 将集合类转换成DataTable /// </summary> /// <param name="list"> ...
- My97DatePicker设置,包括隐藏 清空,设置最大日期等 转载
My97DatePicker是一款非常灵活好用的日期控件.使用非常简单. 1.下载My97DatePicker组件包 2.在页面中引入该组件js文件: <script type=&quo ...
- Django学习笔记第十二篇--关于自定义数据库字段数据类型
一.需求背景: django的models模块提供了很多数据字段的数据类型field,但是总有写奇葩需求不能依靠默认字段满足,所以需要自定义数据数据库数据字段类型.所有的自定义field应该在app路 ...
- Android项目混淆打包
以下为我此期项目中的关于混淆打包的总结:(本人第一次混淆打包,呵呵,错误很多!列了一些比较头疼的)一.项目混淆过程中注意事项:由于我的sdk版本较高,因此新建android项目下只有proguard- ...