C语言之strsep用法实例(八十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀
优质专栏:多媒体系统工程师系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:C语言之strsep用法实例

2.strsep函数介绍

  • strsep 函数是 C 语言标准库中的一个函数,用于在字符串中查找并分割子串。该函数在处理由特定分隔符分隔的字符串时非常有用,常见于处理 CSV 文件、命令行参数等场景。

  • strsep 函数接受两个参数:一个是指向要分割字符串的指针的指针,另一个是指向分隔符字符串的指针。在每次调用时,strsep 会从原字符串中查找第一个分隔符,将找到的子串与后续部分分离开来,并返回指向子串的指针。同时,它会更新传入的指针,使其指向原字符串中剩余的部分。

  • 使用 strsep 函数的一个关键特点是它会修改原字符串。这意味着在调用 strsep 后,原字符串的内容会被改变,以反映分割后的状态。因此,如果你需要保留原字符串的副本,你应该在调用 strsep 之前手动复制它。

  • 需要注意的是,strsep 函数的行为可能因不同的实现而略有差异,因此在使用时应该参考特定平台或编译器的文档。此外,由于它会直接修改原字符串,因此在某些情况下可能会引入错误或不确定性。因此,在使用 strsep 时需要谨慎,并确保理解其行为和潜在的影响。

  • 总的来说,strsep 函数是一个强大的工具,用于在 C 语言中处理分割字符串的任务。然而,由于它直接修改原字符串,因此在使用时需要格外小心,并考虑使用其他更安全的字符串处理函数作为替代方案。

3.代码实例

<1>.分割逗号分隔的字符串

#include <stdio.h>  
#include <string.h>  
  
int main() {  
    char input[] = "apple,banana,cherry";  
    char *token;  
    char *remaining = input; // 指向原字符串的指针  
    const char delim[] = ","; // 分隔符  
  
    // 循环调用 strsep 直到返回 NULL  
    while ((token = strsep(&remaining, delim)) != NULL) {  
        printf("%s\n", token); // 打印每个分割出的子串  
    }  
  
    return 0;  
}

<2>.分割空格分隔的字符串

#include <stdio.h>  
#include <string.h>  
  
int main() {  
    char input[] = "Hello world from C language";  
    char *token;  
    char *remaining = input; // 指向原字符串的指针  
    const char delim[] = " "; // 分隔符为空格  
  
    // 循环调用 strsep 直到返回 NULL  
    while ((token = strsep(&remaining, delim)) != NULL) {  
        printf("%s\n", token); // 打印每个分割出的单词  
    }  
  
    return 0;  
}

<3>.分割由多个字符分隔的字符串

#include <stdio.h>  
#include <string.h>  
  
int main() {  
    char input[] = "apple:banana;cherry,date";  
    char *token;  
    char *remaining = input; // 指向原字符串的指针  
    const char delim[] = ":;,"; // 分隔符为冒号、分号和逗号  
  
    // 循环调用 strsep 直到返回 NULL  
    while ((token = strsep(&remaining, delim)) != NULL) {  
        printf("%s\n", token); // 打印每个分割出的子串  
    }  
  
    return 0;  
}

<4>.处理连续分隔符的情况

#include <stdio.h>  
#include <string.h>  
  
int main() {  
    char input[] = "apple,,banana,   ,cherry";  
    char *token;  
    char *remaining = input; // 指向原字符串的指针  
    const char delim[] = ","; // 分隔符为逗号  
  
    // 循环调用 strsep 直到返回 NULL  
    while ((token = strsep(&remaining, delim)) != NULL) {  
        // 去除可能的开头和结尾空格  
        size_t len = strlen(token);  
        if (len > 0 && token[len - 1] == ' ') {  
            token[len - 1] = '\0'; // 去除尾随空格  
        }  
        if (token[0] == ' ') {  
            memmove(token, token + 1, strlen(token)); // 去除开头空格  
        }  
        printf("%s\n", token); // 打印每个分割出的子串  
    }  
  
    return 0;  
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/484813.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python音视频技术】Python音视频技术系列文章2---视频提取音频转换文字

接上一篇文章 【Python音视频技术】玩AI视频创作引发写Python音视频技术系列文章1---视频添加字幕 之前我想在视频中提取音频转换文字&#xff0c; 当时是用 PC剪映专业版搞定的&#xff0c; 详情见 【AI应用】模仿爆款视频二次创作短视频操作步骤 。 这里我准备用pytho…

铁道障碍物检测6种YOLOV8

铁道障碍物检测6种&#xff0c;采用YOLOV8训练&#xff0c;得到PT模型&#xff0c;然后转换成ONNX模型&#xff0c;OPENCV调用 铁道障碍物检测6种YOLOV8

android Fragment 生命周期 方法调用顺序

文章目录 Introlog 及结论代码 Intro 界面设计&#xff1a;点击左侧按钮&#xff0c;会将右侧 青色的RightFragment 替换成 黄色的AnotherRightFragment&#xff0c;而这两个 Fragment 的生命周期方法都会打印日志。 所以只要看执行结果中的日志&#xff0c;就可以知道 Fragme…

Linux 系统 快速卸载docker

(卸载前一定要做好相关数据的备份) 卸载&#xff1a; 第一种卸载方法 1、查询docker安装过的包&#xff1a; yum list installed | grep docker 2、删除安装包&#xff1a; yum remove docker-ce.x86_64 ddocker-ce-cli.x86_64 -y 3、删除镜像/容器等 rm -rf /var/lib/dock…

IT运维服务规范标准与实施细则

一、 总则 本部分规定了 IT 运维服务支撑系统的应用需求&#xff0c;包括 IT 运维服务模型与模式、 IT 运维服务管理体系、以及 IT 运维服务和管理能力评估与提升途径。 二、 参考标准 下列文件中的条款通过本部分的引用而成为本部分的条款。凡是注日期的引用文件&#xff0c…

基于QT的实现的人脸识别、人脸标记、人脸比对

该项目使用的人脸模型框架采用的是seetaface开源版本&#xff0c;经过测试发现效果还算可以。 人脸识别的效果图如下: 人脸比对的效果图如下&#xff1a; 鉴于测试识别的精度特意找了不同两人相似的人脸进行比对&#xff0c;效果如下图&#xff1a; 由于该模型采用的阈值是0.6…

前端框架前置课(1)---AJAX阶段

1. AJAX入门 1.1 AJAX概念和axios使用 1.1.1 什么是AJAX? 1.1.2 怎么用AJAX? 引入axios.js 获取省份列表数据 1.2 认识URL 1.3 URL查询参数 1.4 常用请求方和数据提交 1.5 HTTP协议-报文 1.5.1 HTTP响应状态码 1.5.1.1 状态码&#xff1a;1XX&#xff08;信息&#xff09…

vulhub中Apache Shiro 认证绕过漏洞复现(CVE-2020-1957)

Apache Shiro是一款开源安全框架&#xff0c;提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用&#xff0c;同时也能提供健壮的安全性。 在Apache Shiro 1.5.2以前的版本中&#xff0c;在使用Spring动态控制器时&#xff0c;攻击者通过构造..;这样的跳转&#xff0…

Oracle等待事件-db file parallel read

前面两篇聊了Oracle等待事件-db file scattered read和Oracle等待事件-db file sequential read 相比于前两者等待事件只有读,但是到db file parallel 就有db file parallel read 和 db file parallel write db file parallel read是指当进程并行发出多个 I/O 请求以将数据…

Linux虚拟机的安装部署--尚硅谷笔记

part1 VMware的使用 学习目标 1 熟悉VMware软件的使用 2 可以熟练为虚拟计算机安装Linux操作系统 3 能独立解决安装过程中的常见问题 第一节 VMware的作用 VMware软件的作用 ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传] 第一步&#xff0c;在W…

DFS基础——迷宫

迷宫 配套视频讲解 关于dfs和bfs的区别讲解。 对于上图&#xff0c;假设我们要找从1到5的最短路&#xff0c;那么我们用dfs去找&#xff0c;并且按照编号从大到小的顺序去找&#xff0c;首先找到的路径如下&#xff0c; 从节点1出发&#xff0c;我们发现节点2可以走&#xff…

面试算法-88-反转链表

题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 解 class Solution {public ListNode reverseList(ListNode head) {if(head null || hea…

opencv-批量调整图片的曝光率

#--coding:utf-8-- import cv2 import numpy as np import osdef gamma_trans(img,gamma):#gamma函数处理gamma_table[np.power(x/255.0,gamma)*255.0 for x in range(256)]#建立映射表gamma_tablenp.round(np.array(gamma_table)).astype(np.uint8)#颜色值为整数return cv2.LU…

2024年最新阿里云服务器价格表(配置价格+带宽价格+磁盘)

2024年腾讯云服务器优惠价格表&#xff0c;一张表整理阿里云服务器最新报价&#xff0c;阿里云服务器网整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单&#xff0c;大家也可以直接移步到阿里云CLUB中心查看 aliyun.club 当前最新的云服务器优惠券…

WindowsServer2008 安装

一、镜像包 链接&#xff1a;https://pan.baidu.com/s/1t4ju_NN2Od4_1HXeWimaPw?pwd58uq 提取码&#xff1a;58uq 二、安装步骤 第一步&#xff1a;点击创建新的虚拟机 第二步&#xff1a;点击下一步 &#xff08; 可以选典型&#xff0c;也可以选择自定义&#xff09; 第…

JavaScript基础知识汇总【全!】

JavaScript 基础 JavaScript 运行在客户端的脚本语言&#xff0c;不需要编译&#xff0c;由js解释器(js引擎)逐行解释执行。Node.js也可以用于服务器端编程。JavaScript组成: ECMAScript(JavaScript语法)、DOM(文档对象模型)访问HTML文档的所有元素、BOM(浏览器对象模型)它使J…

LeetCode-热题100:42. 接雨水

题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a; height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a; 6 解释&#xff1a; 上面是由数组 [0,1,0,2,1,…

定时器及其简单使用

定时器及其简单使用 文章目录 定时器及其简单使用ARM32单片机定时器定时器原理系统主频与定时时间的关系定时器计时上限预分频器 基于定时器应用配置Timer.cPSC、CAR减1原因 PWM什么是PWM?如何生成PWM&#xff1f;PWM输出使用PWM模式有效电平定时器可以输出几个通道的PWM&…

JUC(二)

1、wait notify Owner 线程发现条件不满足&#xff0c;调用 wait 方法&#xff0c;即可进入 WaitSet 变为 WAITING 状态 BLOCKED 和 WAITING 的线程都处于阻塞状态&#xff0c;不占用 CPU 时间片 BLOCKED 线程会在 Owner 线程释放锁时唤醒 WAITING 线程会在 Owner 线程调用 …

什么是Linux?它与其他操作系统有何区别?

什么是Linux&#xff1f;它与其他操作系统有何区别&#xff1f; 什么是Linux&#xff1f;它与其他操作系统有何区别&#xff1f;摘要引言正文内容了解LinuxLinux与其他操作系统的区别开放性多样性安全性 &#x1f914; QA环节小结 参考资料表格总结总结未来展望 博主 默语带您 …