C语言字符串分割函数split实现

如何进行字符串的分割和拼接? 字符串的分割和拼接是在C语言编程中常见的操作,尤其在处理文本数据时非常重要。在本文中,我将详细解释如何在C语言中进行字符串的分割和拼接,包括使用标准库函数和手动操作字符串数组的方法,以及一些实际应用示例。 阅读详情

参考了到处是“坑”的strtok()—解读strtok()的隐含特性这一篇博文, 概括来说C语言在string.h中的strtok()有以下几个坑:

  1. 不可重入
  2. 原字符串被修改
  3. 连续的分隔符被当做一个分隔符处理
  4. 忽略开头结尾的分隔符
不过怎么说多多少少有些缺陷,用起来不是很满意,因此自己动手实现了一个类似java中split的字符串分割函数,如下:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
/*
用delimiter中的每一个分隔符分割str字符串,这并不会改变str中的字符,然后返回一个字符串数组.
字符串数组中的字符串有可能是以'\0'开头的空串(出现在str首尾或连续的分隔符会产生这样的空串).
这个函数有以下特性:
	支持多线程,可重入的;
	不会修改原字符串;
	能处理首尾和连续的分隔符.
返回:以NULL为结束标志的字符串数组.
*/
char** split(char *str, char *delimiter) {
	int len = strlen(str);
	char *strCopy = (char*)malloc((len + 1) * sizeof(char)); //额外分配多一个字符空间来存储'\0'
	strcpy(strCopy, str); //复制str字符串
	//将strCopy中的每个分隔符赋值为'\0'
	for (int i = 0; strCopy[i] != '\0'; i++) {
		for (int j = 0; delimiter[j] != '\0'; j++) {
			if (strCopy[i] == delimiter[j]) {
				strCopy[i] = '\0';
				break;
			}
		}
	}
	//为字符串数组分配空间,额外分配多一个字符串指针并赋值为NULL来作为字符串结束标志
	char** res = (char**)malloc((len + 2) * sizeof(char*)); 
	len++; //遍历到strCopy最后的'\0'才结束
	int resI = 0; //每一个分隔符和原字符串的'\0'标志依次作为数组中的字符串的结束标志
	for (int i = 0; i < len; i++) {
		res[resI++] = strCopy + i;
		while (strCopy[i] != '\0') {
			i++;
		}
	}
	res[resI] = NULL; //字符串数组中结束标志


	return res;
}
int main() {
	//split测试数据
	char strs[][40] = {
		{""},
		{"apple"},
		{"app@le"},
		{"ap@pl&e"},
		{"@"},
		{"app@@le"},
		{"@apple@"}
	};


	for (int i = 0; i < 7; i++) {
		char **res = split(strs[i], (char*)"@&");
		for (int j = 0; res[j] != NULL; j++) {
			printf("%s\n", res[j]);
		}
		printf("**************\n");
	}


	return 0;
}

测试效果:


C语言分割字符串 【代码】C语言分割字符串。 阅读详情

相关推荐

读取文件行并分割行中字符串:C/C++以及python实现

一、问题描述 给定一文件,依次读取文件中各行的字符串(字符串之间以空格分开)。 例如:文件test.txt中有如下内容: first  second  third  forth  (第一行) fifth  sixth seventh   (第二上) ... (其他行) 则读取的内容依次为:   first  second  third  forth   fifth  sixth

heyabo 3万+

C语言 strtok字符串分割函数详解

strtok函数的作用是比较独特的,可以用来对字符串进行分割,对于我们获取命令或者数据集合后的数据处理是不可或缺的一步。但是详细介绍strtok的博文很少,而且linux手册的介绍也比较简单,这边写篇博文记录一下学习到的这个函数的用法。

weixin_37704787的博客 1万+

在C语言中分割字符串

<br />C语言的库函数中,没有类似java中String类的split方法,可以把一个长字符串分割为字符串数组。不过,还是可以利用几个库函数,自己造出split的效果。虽然不像java那样支持分隔符为正则表达式,但一般情况下也够用了。<br /><br />#include <stdio.h> #include <stdlib.h> #include <string.h> /* * count the number of a character in a string */ int co

The power of C, the secret of MD 1万+

C语言实现split函数

C语言实现split函数功能

qq_38842418的博客 5076

C语言实现字符串分割功能

在函数中,我们定义了一个指针变量p用于存储分割后的子串,以及一个整型变量count用于记录分割结果的数量。strtok函数会将第一个参数作为待分割的字符串,第二个参数作为分隔符,返回分割后的子串。该函数接收三个参数,分别为待分割的字符串、分隔符、存储分割结果的二维字符数组和分割结果的数量。该函数将字符串按照分隔符进行分割,并将分割结果存储到二维字符数组中,最后返回分割结果的数量。在C语言中,有时候需要对字符串进行分割,以获取其中的子串,这时候就可以使用字符串分割函数来实现。C语言实现字符串分割功能。

m0_47037246的博客 2085

C语言实现split函数功能(附完整源码)

C语言实现split函数功能(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 721

c语言中字符切割函数split,c 语言 指针 C语言字符串分割函数split实现

c语言也有类似其他语言的split字符串分割函数,就是strtok使用方法如下://用逗号做分隔符,读出内容//char s[] = "123-sldkf-123ls-343434-dfjdl...yihui82017年01月12日 10:314303一、 split()方法用于将一个字符串分割成字符串数组。Vincentlmeng2017年06月14日 10:336111C标准库中strtok的...

weixin_39847099的博客 1070

现场总线课程设计-基于modbus协议使用QT实现主从站控制通信

【平台:QT】 【协议:modbus(注:由于要求,需要自己来实现modbus库,而非直接调用已有的库)】 【由于复制粘贴,时间原因可能格式有误,如需要具体工程文件以及报告文件请私信博主】 1、 大作业任务: (1)使用附件中工具软件体验MODBUS主从站数据传输过程(可在主从站模拟工具里面观察各功能码对应数据帧内容并对其进行分析) (2)使用串口调试助手,手工发出MODBUS主、从站该发出的数据,并观察对方发出的数据 (3)实现MODBUS主、从站功能,描述实现过程(语言不限于使用VC

weixin_44469597的博客 4066

C语言实现split()函数:字符串分割

C语言实现split函数:字符串分割 Python中有split()函数,觉得很好用,但在C语言的标准库下却没有,只好手动实现了 ##代码如下 /* * 函数: split() * 功能: 指定分隔符分割字符串 * 返回值: 一个指向包含char*指针的数组的指针,即char **pt */ #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;string.h&amp;gt...

qq_23944945的博客 1万+

10-142 6-4 查询厂商“D“生产的PC和便携式电脑的平均价格

分数 10全屏浏览题目切换布局作者 lhm单位 河北农业大学本题目要求编写SQL语句,查询厂商D生产的PC和便携式电脑的平均价格。

dqd66的博客 2748

Codex驱动AEDT完成无线充电仿真——从双线圈建模到三维电磁场动画

本文介绍了一个利用Codex、PyAEDT和Ansys Electronics Desktop 2025 R2实现双线圈无线充电系统自动建模与仿真的案例。通过简化模型(平面线圈+铁氧体磁芯),完成了从参数化建模、电磁场求解到后处理的全流程自动化,获得了耦合系数(k=0.17)、三维电磁场分布及多周期动态可视化效果。研究发现:线圈间距对传输效率影响最大(10-30mm间距时效率从40.2%降至5.57%),横向偏移15mm会使效率下降35%,而磁芯厚度增加带来的效率提升有限(3→7mm仅提高1.67%)。该框

sjjsjjsjjsjjsjj的博客 447

c语言将字符串按空格分割_如何在c++中实现字符串分割函数split详解

前言在学习c++中string相关基本用法的时候,发现了sstream的istringstream[1]可以将字符串类似于控制台的方式进行输入,而实质上这个行为等同于利用空格将一个字符串进行了分割,于是考虑到可以利用这个特性来实现c++库函数中没有的字符串分割函数splitstring src("Avatar 123 5.2 Titanic K");istringstream istrStream...

weixin_33901087的博客 6473

systemView的安装使用

systemView的安装使用

qq_33712422的博客 3974

c语言中可以拆分字符串的函数,C语言实现字符串分割(类似vb中split函数)

头文件:#include 定义函数:char * strtok(char *s,const char *delim);函数说明:strtok()用来将字符串分割成一个个片段。参数s 指向欲分割的字符串,参数delim 则为分割字符串,当strtok()在参数s 的字符串中发现到参数delim 的分割字符时则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s 字符串,往后的调用...

weixin_35990136的博客 1137

[ESP32]:基于esp-modbus实现serial主机

[ESP32]:基于esp-modbus实现serial主机

LINKKEEE的博客 2568

YOLOv11改进 | Conv篇 | 图像去雾卷积DEConv助力yolov11有效涨点(部署零额外开销)

本文介绍了一种最新改进机制用于低层视觉任务的细节增强卷积(DEConv)机制。DEConv在训练阶段采用"普通卷积+差分卷积"的多分支并联结构,增强网络对边缘、纹理等细节特征的学习能力;在推理阶段可折叠为标准3×3卷积,保持与普通卷积相同的计算效率。文中详细阐述了DEConv的工作原理、实现方法以及在YOLOv11中的应用步骤,包括核心代码解析、模型修改方法和训练配置。实验表明,该机制在去雾、去噪、超分等强调细节重建的任务中具有显著优势。文章还提供了完整的代码实现和训练指导.

Snu77的博客 2438

C语言实现字符串分割(类似vb中split函数)

头文件:#include 定义函数:char * strtok(char *s, const char *delim); 函数说明:strtok()用来将字符串分割成一个个片段。参数s 指向欲分割的字符串,参数delim 则为分割字符串,当strtok()在参数s 的字符串中发现到参数delim 的分割字符时则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s

Leon 2461

OpenGL ES 3.0 从入门到精通系统性学习教程

因为在工作中频繁使用 OpenGL ES 做一些特效、滤镜之类的效果,加上平时学到的的知识点也比较细碎,就想着去系统地学习下 OpenGL ES 相关开发知识,并将学习过程记录下来。

字节流动 3万+

C语言 字符串分割

C语言 字符串分割 一、简述 记--字符串分割,strtok()函数的使用例子、自己实现split()函数。 二、例子代码 #include <stdio.h> #include <string.h> /* * 函数:split * 描述:按指定分隔符分割字符串 * 参数: * str:要分割的字符串 * strLen:要分割...

Genven_Liang的博客 1万+

【Unity3D开发小游戏】《打地鼠游戏》Unity开发教程

文章目录一、前言二、源码三、正文版本1、相机设置2、洞口设置3、洞口脚本4、鼹鼠5、鼹鼠动画6、鼹鼠碰撞器7、鼹鼠脚本8、击中鼹鼠的效果9、实现击中效果10、增加更多的洞口 一、前言 让我们使用Unity3D开发一个打地鼠游戏吧。 打地鼠游戏是一个非常有趣的街机游戏,是在1976年左右发明的。 游戏的主要玩法就是打击从洞里出来的鼹鼠,玩家击中鼹鼠的速度越快,得分就越高 我们将讲解制作游戏的所需的每...

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 8461

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

c语言字符串换行分割

c语言基础库有字符串分割strtok,但是由于不可重入,很多都自己写,下面的代码实现类似和python 的split函数差不多, 只是我将分隔符定为换行符’\n’。 代码如下: int split_line(const char *str, char ***str_lines, int *len) { char *s = "\n"; char *b_str = (char *)m...

True Truth 6235

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

c语言 分割函数的实现

#include<stdio.h> #include<string.h> #define SIZE 10 int my_split(char *p[SIZE], char str[],char const *sep) { int num = 0; for(p[num] = strtok(str,sep); p[num] != NULL; p[++num] =...

jgr8224的专栏 856

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C语言split方法两个参数,C语言实现split函数

C语言实现split函数(2012-04-10 03:37:37)标签:c语言杂谈C语言实现split函数哪位高手帮忙用c语言写一个函数,可以实现VB script的split函数功能原帖由 huasd1109 于2007-6-28 19:29 发表哪位高手帮忙用c语言写一个函数,可以实现VB script的split函数功能:em12::em12::em12: 一上来就直接要代码这个问题,在CU...

weixin_39559750的博客 350

C++常见问题: 字符串分割函数 split

C++常见问题: 字符串分割函数 split C++标准库里面没有字符分割函数split ,这可太不方便了,我已经遇到>3次如何对字符串快速分割这个问题了。列几个常用方法以备不时之需。   方法一: 利用STL自己实现split 函数(常用,简单,直观) 原型: vector split(const string &s, const string &seperator); 输入一

u014682691的专栏 1271
上一篇: Leetcode 3Sum 高效解法[Java]
下一篇: C语言trim()实现
MaplePC
博客等级 码龄11年 11粉丝 20原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值