C/C++分割字符串: strtok函数

2023-05-16

C语言如何实现将字符串ABCD-efgh-i1234,David-Julie-Susan-,分隔开的几个字串ABCD efgh i1234 David Julie Susan取出来?

有个函数叫 strtok()

#include <stdio.h>
#include <string.h>
int main(void)
{
        char buf[] = "ABCD-efgh-i1234,David-Julie-Susan";
        char splitstr[6][10];
        char *tok;
        int8_t i = 0;
        tok = strtok(buf, "-");
        while (tok) 
        {
            strcpy(splitstr[i], (const char *)tok);
            printf("splitstr[%d]=%s\n",i, splitstr[i]);
            i++;
            tok = strtok(0, "-,");
        }
       return 0;
}

运行结果:

splitstr[0]=ABCD
splitstr[1]=efgh
splitstr[2]=i1234
splitstr[3]=David
splitstr[4]=Julie
splitstr[5]=Susan

1. 函数原型

char *strtok(char s[], const char *delim);
参数说明:s为要分解的字符串,delim为分隔符字符串。delim字符还可以是多个,不一定只为一个,多个字符连起来放在双引号间,上面的例子中是短横线和逗号"-,"。但是当只要遇到其中任意一个就可以分割,并不要求分隔的字符连起来才能分割。

2.定义

strtok()分解字符串为一组字符串。s为要分解的字符,delim为分隔符字符(如果传入字符串,则传入的字符串中每个字符均为分割符)。首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。在头文件#include<string.h>中。

3.说明

  • 当strtok()在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回指向被分割出片段的指针。

  • 第一次调用时候,strtok函数从不是分隔符的第一个字符开始搜索,找到第一个是分隔符为止,将其替换为‘\0’作为结束。但是函数此时已经保存了分隔符之后的那个字符,因此后续再调用strtok时,第一个参数为NULL,继续将string标记化(切割)。NULL参数表示调用strtok继续从string中上次调用 strtok时保存的位置开始标记化。

  • 返回值
    从s开头开始的一个个被分割的字符串指针。当s中的字符查找到末尾时,即调用strtok时已经没有标记(分隔符),则strtok返回NULL。返回NULL。如果查找不到delim中的字符时,返回当前strtok的字符串的指针。所有delim中包含的字符都会被滤掉,并将被滤掉的地方设为一处分割的节点。

  • 需要注意的是,使用该函数进行字符串分割时,会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。第一次分割之后,原字符串str是分割完成之后的第一个字符串,剩余的字符串存储在一个静态变量中,因此多线程同时访问该静态变量时,则会出现错误。

4.使用

strtok函数会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。如果要保持原字符串的完整,可以使用strchr和sscanf的组合等。

参考文献:

  1. strtok()函数详解!_人工智能_魏波-CSDN博客
  2. strtok和strsep函数详解_运维_半仙姜-CSDN博客
  3. C语言 – 字符串中根据特定字符(串)分割_C/C++_青椒*_*凤爪爪的博客-CSDN博客
  4. C语言提取被特定字符分隔的字符串中的内容_weixin_30820077的博客-CSDN博客
  5. strtok函数 的原理及一个坑_网络_xzymmd的博客-CSDN博客
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C/C++分割字符串: strtok函数 的相关文章

  • pixhawk硬件设计粗略解析

    文章目录 前言一 pixhawk是什么 xff1f 二 pixhawk硬件解析总结 前言 本片是个人对NFCYv5飞控的硬件设计的个人分析与笔记 为什么要这么做呢 xff1f 原因很简单 xff0c 一是对pixhawk硬件组成有更加深入的
  • Android IPC机制

    本文首发于个人博客 胖蔡叨叨叨 xff0c 更多相关信息可点击查看 Android IPC机制 IPC IPC Inter Process Communication 进程间通信 xff0c 是指系统中运行的不同进程间的信息交互过程 And
  • PX4的控制与输出

    文章目录 前言控制器部分输出部分控制组混控器混控器的启动信号输出 前言 这篇记录一下自己分析PX4从位置控制 gt 速度控制 gt 姿态控制 gt 角速度控制 gt 电机输出的源码框架的阅读与理解 xff0c 便于之后自己修改控制器 在这个
  • 悬停油门的参数估计方法

    悬停油门的参数估计方法 估计悬停油门 xff0c 实际上就是完成油门值与飞机加速度之间的映射关系 xff0c 准确的估计值可以让飞行控制更为准确 在PX4中 xff0c 对悬停油门的估计方法采用的是扩展卡尔曼滤波 xff0c Fast dr
  • D435/D435i使用技巧

    D435 D435i使用技巧 D435 D435i是目前市场上使用最为方便的双目深度相机 虽然淘宝上其价格有些让人望而却步 xff0c 但是咸鱼上成色不错的D435 D435i 价格就在1000左右 xff0c 依旧是自主无人机视觉定位和感
  • PX4 imu传感器配置

    PX4 传感器配置 坐标系定义 旋转变化 reference 在机器人中各个坐标系之间的变换是非常常见的 xff0c 而在ROS tf 工具中 xff0c 以及Eigen 中 我们常常会见到RPY的旋转表示和四元数的旋转表示 当然学航空出生
  • PX4常用sh命令

    PX4常用sh命令 基于NUTTXnsehll的设计 xff0c PX4还自定义了一些sh命令 xff0c 可以在调试飞控时起到重要作用 这些命令在PX4开发者手册中 xff0c 都有提到 但是为了方便后期使用 xff0c 这里再单独做一下
  • 强化学习介绍(RL)

    一 简介 机器学习有三大分支 xff0c 监督学习 无监督学习和强化学习 xff0c 强化学习是系统从环境学习以使得奖励最大的机器学习 人工智能中称之为强化学习 xff0c 在控制论中被称之为动态规划 xff0c 两者在概念上是等价的 也被
  • 深度学习中高斯噪声:为什么以及如何使用

    来源 xff1a DeepHub IMBA 本文约1800字 xff0c 建议阅读8分钟 高斯噪声是深度学习中用于为输入数据或权重添加随机性的一种技术 在数学上 xff0c 高斯噪声是一种通过向输入数据添加均值为零和标准差 的正态分布随机值
  • 面向算法选择的元学习研究综述

    来源 xff1a 专知 本文为综述介绍 xff0c 建议阅读5分钟本文对基于元学习的算法选择进行综述总结 xff0c 为研究人员了解相关领域的发展现状提供参考 摘要 xff1a 随着人工智能的快速发展 xff0c 从可行的算法中选择满足应用
  • tortoise git 冲突解决

    1 背景 使用tortoise git 解决conflict 2 解释 Git进行同步的时候 xff0c 经常会出现冲突 xff0c 有时候冲突的选项会有三种选项 xff1a 1 Resolved xff1a 直接把文件标识为冲突已经解决
  • win11旗舰版安装WSL子系统和环境-7搭建图形化界面和Docker容器

    搭建图形化界面和Docker容器 Win10Linux子系统 xff08 WSL xff09 图形界面的安装 https blog csdn net NovaSliver article details 83190269 utm mediu
  • 推荐几款Nodejs实现的web框架

    本文首发于个人博客 胖蔡叨叨叨 xff0c 点击可查看原文 Nodejs在近些年可以说是发展异常的迅猛 xff0c 由于同样使用的js原因 xff0c 对于前端开发人员可以说是非常的友善了 xff0c Github上有关nodejs的贡献也
  • chatgpt_academic学术优化(配置使用教学-保姆级)

    一 Anaconda 下载及安装 1 官网下载链接 xff1a www anaconda com 2 安装 xff08 1 xff09 下载完成后 xff0c 双击exe进行安装 xff08 2 xff09 安装完成后 xff0c 点击An
  • C++正则表达式regex_match,regex_search和regex_replace简单使用

    C 43 43 正则表达式 零 前言一 说明二 测试代码三 运行结果 零 前言 正则表达式是非常强大的文本处理和字符串处理工具 xff0c C 43 43 11之前一直没有引入正则表达式 xff0c 只能使用boost库中的 xff0c C
  • debian桌面启动不了的问题

    怎么发生的 xff1f 昨天安装了一堆的软件后 xff0c 发现桌面没法在桌面进行应用程序切换 xff0c 然后就重启了一下系统 xff0c 想恢复 xff0c 结果 xff0c 重启后 xff0c 开机就直接进shell了 分析 做了一些
  • Byobu 命令行终端的强大利器

    My heart is in the work xff01 工作以来接触到Linux系统的地方挺多 xff0c Android的源码下载 xff0c 服务器的连接等等 xff0c 用的越多越发现Linux的强大与方便 一次偶然间 xff0c
  • .NET下基于API封装的DirectUIHWND窗体访问

    直接切入正题 1 添加引用 项目 gt 添加引用 gt C Progmme 1 MSN Messenger msnmsgr exe 2 using MessengerAPI 声明 private MessengerAPI Messenger
  • 漫话Kubernetes的网络架构,该用NodePort还是Ingress还是load balancer?

    目录 一 基本概念 1 Kubernetes pod 2 Kubernetes service 3 Kubernetes NodePort 4 Kubernets Ingress 5 Kubernetes loadbalancer 二 从实
  • 彻底理解git 本地分支与远程分支,以及git pull与git fetch的区别, 以及git status输出的“Your branch is behind xxx”

    git 本地分支 xff1a 当clone一个远程repo之后 xff0c 默认会新建一个master或main的本地分支 比如 xff1a git branch a main remotes origin HEAD gt origin m

随机推荐

  • 深入分析OpenFlow协议

    文章目录 OpenFlow是什么 xff1f xff1f xff1f OpenFlow的起源与发展OpenFlow工作原理OpenFlow组件OpenFlow控制器1 NOX POX2 ONOS3 OpenDaylight OpenFlow
  • ubuntu登录输入用户名密码之后重新跳回登录界面

    Ubuntu 14 04 今天学习鸟哥的私房菜使用了命令startx xff0c 通过注销重新登录 xff0c 就发生了如题的情况 在登录界面输入正确的用户名密码 xff0c 显示器黑屏一段时间 xff0c 然后重新跳转回登录界面 重启无效
  • npm install 报错:verbose stack Error: unable to resolve dependency tree

    环境 npm 64 7 24 1 node 64 v12 16 2 一 分析原因 xff1a 经排查 xff0c 1 发现有组件package json中有peer dependency xff0c 指明了angular 7 x 的版本 x
  • Python实现单链表

    单向链表也叫单链表 是链表中最简单的一种形式 它的每个节点包含两个域 一个信息域 元素域 和一个链接域 这个链接指向链表中的下一个节点 而最后一个节点的链接域则指向一个空值 nbsp 表元素域elem用来存放具体的数据 链接域next用来存
  • SpringBoot+JavaMailSender发送邮件

    SpringBoot 43 JavaMailSender发送邮件 概述 spring提供了发送邮件的接口JavaMailSender xff0c 通过JavaMailSender可以实现后端发送邮件 xff0c 并且可以根据不同业务需求 x
  • SpringBoot启动时:Process finished with exit code 0解决办法

    记录一次项目启动的报错 spring boot 启动项目 xff0c 无异常信息报错 xff0c 但是项目启动不起来 xff0c 提示 xff1a Process finished with exit code 0 这个提示并不是报错了 x
  • java8 List对象去重(按照对象属相去重)

    方式一 xff1a 去重后对象在集合的顺序变化 List对象去重 xff0c 按照对象的某个字段去重 xff0c 返回去重后新的对象集合 public static void main String args List lt Student
  • MAC安装maven步骤

    1 从maven官网下载 xff1a http maven apache org download cgi 2 解压 xff08 Mac xff09 zip包解压 unzip apache maven 3 8 6 src zip tar包解
  • 阿里云ECS服务器配置外部端口和内部容器端口的映射

    前言 阿里云ECS服务器默认是入网所有端口关闭 xff0c 出网所有端口打开 我们在服务器上启动一个应用程序 xff0c 默认是无法通过http 公网ip port 的方式访问的 如果想要访问成功 xff0c 阿里云ECS的网络端口进行两部
  • Linux查看所有对外开放的端口

    Linux查看所有对外开放的端口 Centos 8查看所有对外开放的端口 查看防火墙对对应的端口是否已开启 firewall cmd list all 方式1 已知服务使用的端口 xff0c 查看服务是否在监听 netstat anlp g
  • Doccker部署若依前后端分离版本

    docker部署若依前后端分离版本 部署步骤请上gitee拉取 xff1a 码云 docker部署遇到的问题总结 docker compose up 启动msql时 xff0c 并没有执行初始化脚本 xff0c 原因是mysql的docke
  • springboot多模块启动,在yml配置了启动端口但启动还是8080

    springboot多模块项目 xff0c 每个模块单独配置了启动端口 xff0c 但是启动时 xff0c 都以8080端口启动 xff0c 配置如下 项目结构 xff1a provider模块的application yml配置 cons
  • 线程池几种状态转换

    线程池几种状态转换 xff1a
  • OpenStack与SDN控制器的集成

    OpenStack与SDN控制器的集成 蒋暕青 1 OpenStack Neutron简介 Neutron添加了一层虚拟的网络服务让租户 用户 构建自己的虚拟网络 Neutron是对网络的虚拟化 xff0c 该网络可以从一个地方移动到另一个
  • INSTALL_FAILED_TEST_ONLY

    查看博客 http www enjoytoday cn posts 159 Android studio安装apk无法安装 xff0c 报错误 xff0c 网上搜索可以看到都说是 调用者不被允许测试的测试程序 xff0c 但具体这句话具体是
  • 好看的网站

    1 红色主题网站 雕塑类 http www ibaolan com 2 40个布局排版好看的网页设计作品 https www shejidaren com 40 creative web design layout html 3 做了那么久
  • Part 2:Cocos2d-x开发基础-Cocos简介与环境搭建-关东升-专题视频课程

    立即学习 https edu csdn net course play 6735 133126 是独立按键还是矩阵按键
  • 51单片机 串口12864显示驱动

    include lt reg52 h gt define uchar unsigned char define uint unsigned int sbit CS 61 P2 5 片选信号 xff08 RS xff09 sbit SID 6
  • Nginx https 配置步骤,免费证书申请

    第一步 xff1a http aq chinaz com SSL 需要先注册登录站长工具 第二步 xff1a 填写域名信息 xff0c xff08 设置的密钥密码要记住 xff0c 在第五步时需要用到 xff09 第三步 xff1a 选择手
  • C/C++分割字符串: strtok函数

    C语言如何实现将字符串ABCD efgh i1234 David Julie Susan中 和 分隔开的几个字串ABCD efgh i1234 David Julie Susan取出来 xff1f 有个函数叫 strtok span cla