字符串分割函数--strtok与strsep

2023-10-31

  在c/c++中,字符串分割函数主要有两种:一是strtok函数,另一个就是strsep函数。下面我们对这两个函数作一个详细解释说明。

1、strtok

原形:

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

功能:

  分解字符串为一组字符串;str为要分割的字符串,delim为分隔符;

返回值:

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

说明:

  * strtok函数工作时,若在字符串中发现分隔符会将该字符改为’\0’;
  * 第一次调用时,strtok函数必须给予参数str字符串,之后调用则将str参数设置为NULL;至于为什么之后调用将str参数设置为NULL,在下文介绍;
  * strtok内部记录上次调用字符串的位置,所以不支持多线程,可重入版本为strtok_r。

示例

#include <stdio.h>
#include <string.h>

int main()
{
    char str[] = "hello,,world!#c";//strtok函数会改变源字符串,所以不能写 char* str = "";
    char* delim = ",#";

    char *token = NULL;
    token = strtok(str,delim);

    while(token)
    {
        puts(token);
        token = strtok(NULL,delim);
    }

    return 0;
}

运行结果:
这里写图片描述

源码

  其源码有多种实现方式,下面只简单介绍其中的一种。

//字符串分割函数

#include<stdio.h>
#include<
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字符串分割函数--strtok与strsep 的相关文章

  • Qt-Qlist 检查包含自定义类

    有没有办法覆盖加载自定义类的 Qt QList 的比较机制 即在 java 中你只需要重写一个比较方法 我有一个带有我的自定义类模型的 QList QList
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • C#:如何防止主窗体过早显示

    在我的 main 方法中 我像往常一样启动主窗体 Application EnableVisualStyles Application SetCompatibleTextRenderingDefault false Application
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 将 unsigned char * (uint8_t *) 转换为 const char *

    我有一个带有 uint8 t 参数的函数 uint8 t ihex decode uint8 t in size t len uint8 t out uint8 t i hn ln for i 0 i lt len i 2 hn in i
  • 将 xml 反序列化为类,list<> 出现问题

    我有以下 XML
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • 如何在 Linux shell 中将十六进制转换为 ASCII 字符?

    假设我有一个字符串5a 这是 ASCII 字母的十六进制表示Z 我需要找到一个 Linux shell 命令 它将接受一个十六进制字符串并输出该十六进制字符串代表的 ASCII 字符 所以如果我这样做 echo 5a command im
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • 如何使用 std::string 将所有出现的一个字符替换为两个字符?

    有没有一种简单的方法来替换所有出现的 in a std string with 转义 a 中的所有斜杠std string 完成此操作的最简单方法可能是boost字符串算法库 http www boost org doc libs 1 46
  • 防止索引超出范围错误

    我想编写对某些条件的检查 而不必使用 try catch 并且我想避免出现 Index Out of Range 错误的可能性 if array Element 0 Object Length gt 0 array Element 1 Ob
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • Linux下搭建Webdav(apache)

    环境 RHEL 5 4 x86 64 创建webdav 1 安装apache yum install httpd y 2 配置webdav vim etc httpd conf httpd conf
  • Ubuntu下用Lean源码编译openwrt及一行命令u盘启动openwrt安装x86硬盘上

    Ubuntu下用Lean源码编译openwrt 源码地址 https github com coolsnowwolf lede 1 首先微软云服务器装好 Ubuntu 64bit 推荐 Ubuntu 20 04 LTS x64 免费一年 i
  • ftell函数的用法(用于获取指针位置)

    ftell函数用于得到文件位置指针当前位置相对于文件首的偏移字节数 下面给出一个简单的例子 cpp view plain copy include
  • 【CKEditor5】CKEditor5相关问题

    问题解决 如图 这个样式没效果 解决方法 因为没有导入css 导入css后 配置style插件就生效了 问 你的css哪来的 答 所有的样式与插件CXEditor5官网都可以找到 配置的css ck ck content font fami
  • 春招Java后端开发面试 2021-10-8

    春招Java后端开发面试 春招Java后端开发面试总结包含了JavaOOP Java集合容器 Java异常 并发编程 Java反射 Java序列化 JVM Redis Spring MVC MyBatis MySQL数据库 消息中间件MQ
  • 常用linux命令记录

    常用linux命令记录 1 常用linux命令基本使用列表 序号 命令 英文 作用 01 ls list 查看当前文件夹的内容 02 pwd print work directory 查看当前所在文件夹 03 cd 目录名 change d
  • 高云FPGA系列教程(5):ARM点灯工程设计

    文章目录 toc 1 ARM核定制 2 ARM核程序设计 3 ARM程序烧写 4 工程下载 本文是高云FPGA系列教程的第5篇文章 前面几篇笔记都是介绍的高云GW1NSR 4C FPGA部分的使用 本篇文章介绍片上ARM Cortex M3
  • MES解决方案 附下载地址

    MES Manufacturing Execution System 即制造企业生产过程执行系统 是一套面向制造企业车间执行层的生产信息化管理系统 是美国AMR公司在90年代初提出的 旨在加强MRP计划的执行功能 把MRP计划同车间作业现场
  • 从源码角度看R语言的format函数

    先提一个问题 请问下面最后的两个逻辑语句的判断 结果是什么 x lt c 1234567 8 12 12345 x11 lt format x scientific FALSE x12 lt format x scientific TRUE
  • 安装多版本node

    一 安装多版本node的原因 在项目开发过程中 不同项目使用的nodejs版本不同 有时会因为node版本过高或太低 导致报错 解决方式 利用nvm进行管理 本文使用此种方式 配置环境变量 如理解环境变量可自行配置 二 利用nvm进行管理
  • router-link标签Cannot read property '$route' of undefined"报错解决方法

    报错代码 div class card mb 3 px 3 div
  • vue渲染页面的流程_Vue中DOM渲染的过程

    vue中dom渲染过程 1 响应式 监听data属性的getter setter 2 模板编译 模板到render函数再到vnode 模板不是html 有指令 插值 js表达式 能够实现循环 判断 html是标签语言 只有js才能实现循环判
  • vision transformer

    一 网络构建 import torch from torch import nn from functools import partial 1 patch embedding img size 224 输入图像的宽高 patch size
  • win10进入安全模式的方法(F8不管用/开不开机)

    win10默认不能进入安全模式 这时候开机黑屏怎么办 下面介绍强制进入安全模式的方法 1 关机情况下 按开机键开机 等到出现徽标 下图 这时候长按开机键强制关机 2 再次开机 出现徽标 再次强制强制关机 重复三次 直到出现 正在准备自动修复
  • 【vscode】 VsCode 代码片段

    1 打开Vscode 文件 gt 首选项 gt 用户片段 或用快捷键ctrl shift p输入snip 2 点击用户片段 选择html json或者新建全局代码片段文件 3 随后会打开一个json文件设置 可直接将以下代码粘贴复制到自己的
  • 微信小程序地理位置API使用流程

    地理位置接口使用具体流程 开发者如需在最新版本发布后使用地理位置相关接口 除需完成接口权限开通外 还需在 app json 或ext json 配置环节 具体如下 以wx chooseLocation为例 1 接口权限开通 以下 8 个接口
  • 从mysql数据库中读取二进制文件_MySQL-主从复制:基于二进制文件复制详解

    前言 主从复制是指把一个MySQL的数据库服务器作为主服务器 master 然后把master的数据复制到一个或者多个MySQL数据库服务器作为从服务器 slave 从master到slave的复制一般是异步复制 所以从服务器的复制可以随时
  • 在idea中如何导入JDBC驱动

    1 左上角点击File 选中project Structure 2 找到modules Dependencies 号 JARS 3 选择文件夹找到驱动并导入应用保存即可
  • c/c++数组的用法

    三键三连 三键三连 三键三连 编程找到一个数组中的最大元素和最小元素 输入输出 输入 n n lt 100 n个元素的值 输出 最大元素 最小元素 include
  • 字符串分割函数--strtok与strsep

    在 c 中 字符串分割函数主要有两种 一是strtok函数 另一个就是strsep函数 下面我们对这两个函数作一个详细解释说明 1 strtok 原形 char strtok char str const char delim 功能 分解字