C语言实现Split函数

2023-05-16

借助C语言的动态内存分配,实现类似VB中Split函数的效果。

结构体介绍:

IString:

参数 str:字符串数组的指针

参数 num:字符串个数

函数介绍:

功能:按一个字符来拆分字符串

参数  src:要拆分的字符串
参数  delim:按照这个字符来拆分字符串
参数  istr:借助这个结构体来返回给调用者拆分后的字符串数组和字符串的个数
返回拆分是否成功


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

typedef struct {
    char **str;     //the PChar of string array
    size_t num;     //the number of string
}IString;


/** \Split string by a char
 *
 * \param  src:the string that you want to split
 * \param  delim:split string by this char
 * \param  istr:a srtuct to save string-array's PChar and string's amount.
 * \return  whether or not to split string successfully
 *
 */
int Split(char *src, char *delim, IString* istr)//split buf
{
    int i;
    char *str = NULL, *p = NULL;

    (*istr).num = 1;
	str = (char*)calloc(strlen(src)+1,sizeof(char));
	if (str == NULL) return 0;
    (*istr).str = (char**)calloc(1,sizeof(char *));
    if ((*istr).str == NULL) return 0;
    strcpy(str,src);

	p = strtok(str, delim);
	(*istr).str[0] = (char*)calloc(strlen(p)+1,sizeof(char));
	if ((*istr).str[0] == NULL) return 0;
 	strcpy((*istr).str[0],p);
	for(i=1; p = strtok(NULL, delim); i++)
    {
        (*istr).num++;
        (*istr).str = (char**)realloc((*istr).str,(i+1)*sizeof(char *));
        if ((*istr).str == NULL) return 0;
        (*istr).str[i] = (char*)calloc(strlen(p)+1,sizeof(char));
        if ((*istr).str[0] == NULL) return 0;
        strcpy((*istr).str[i],p);
    }
    free(str);
    str = p = NULL;

    return 1;
}

int main()
{
    int i;
    char s[]="data0|data1|data2|data3|data4|data5|data6|data7|data8";
    IString istr;

    if (  Split(s,"|",&istr) )
    {
        for (i=0;i<istr.num;i++)
            printf("%s\n",istr.str[i]);
        //when you don't ues it,you must to free memory.
        for (i=0;i<istr.num;i++)
            free(istr.str[i]);
        free(istr.str);
    }
    else
        printf("memory allocation failure!\n");


    system("pause");
    return 0;
}




运行结果:

data0
data1
data2
data3
data4
data5
data6
data7
data8

注意:

IString使用完之后要记住释放内存

for (i=0;i<istr.num;i++)

       free(istr.str[i]);

free(istr.str);

 

 

 

 

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

C语言实现Split函数 的相关文章

  • R 分号将列分隔为行

    我正在使用 RStudio 2 15 0 并使用 XLConnect 从 Excel 创建了一个包含 3000 多行和 12 列的对象 我试图将一列分隔 拆分为行 但不知道这是否可能或如何执行 下面的数据示例使用 3 列连接 对此的任何帮助
  • 每次向量元素变化时在 R 中分割向量

    每次元素值发生变化时 我都需要分割重复元素组的向量 例如 test vector lt c string1 string1 string1 string2 string2 string1 string1 string3 必须成为 1 1 s
  • 如何将运算符作为分隔符拆分数学表达式,同时将它们保留在结果中?

    我需要拆分一个表达式 例如 a b c d e and get a b c d e分别 作为字符串数组 以及 d 也是一个运算符数组 分别 我尝试过 String myString String myString a b c d e Str
  • C# 中将一个字符串拆分为另一个字符串

    我一直在使用Split 分割字符串的方法 但这似乎仅在您按字符分割字符串时才有效 有没有办法分割一个string 另一个字符串是按参数分割的 我尝试将拆分器转换为字符数组 但没有成功 换句话说 我想分割string THExxQUICKxx
  • 每第 n 个字符分割一个字符串

    在 JavaScript 中 这就是我们如何在每 3 个字符处分割一个字符串 foobarspam match 1 3 g 我正在尝试弄清楚如何在 Java 中做到这一点 有什么指点吗 你可以这样做 String s 1234567890
  • 反转java String.split()效果的方法? [复制]

    这个问题在这里已经有答案了 我正在寻找一种将字符串数组组合成分隔符的方法 细绳 与 split 相反 在我尝试自己编写之前想询问一下论坛 因为 JDK 拥有一切 据我所知 JDK 中没有任何方法可以实现这一点 阿帕奇公共语言 http co
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • strtok - 如何避免换行并放入字符串数组?

    如果我欺骗了主题 我真的很抱歉 我在这里搜索但没有结果 我有代码 void split char str char splitstr char p char splitbuf 32 int i 0 p strtok str while p
  • 将字符串列拆分为多个虚拟变量

    作为 R 中 data table 包的相对缺乏经验的用户 我一直在尝试将一个文本列处理为大量指示符列 虚拟变量 每列中的 1 表示特定的子字符串是在字符串列中找到 例如我想处理这个 ID String 1 a b 2 b c 3 c 进入
  • 在bash脚本中分割字符串[重复]

    这个问题在这里已经有答案了 我想分割一个字符串并需要其中的一些参数 USER dn uid dfl3030 cn users cn accounts dc tenant dc ycs dc io cn Reb Lena Schmidt kr
  • Java .split("|") 不工作

    我刚刚遇到了一个问题分割法 http docs oracle com javase 6 docs api java lang String html split 28java lang String 29for 字符串不适用于字符 作为一个
  • R strsplit:根据字符分割,除非后面有特定字符

    假设我有一个字符串向量 例如 split these c File Location C Documents File Location Pete s Computer File Location 我想根据 分割该向量中的每个元素 除非后面
  • 按索引偶数或奇数将数组拆分为两个数组

    我有这个数组 array array a b c d e f g 我想根据索引是偶数还是奇数将其分成两个数组 如下所示 odd array a c e g even array b d f 提前致谢 一种解决方案 使用匿名函数和array
  • 如何对逗号和句号使用 re.split?

    我有多个字符串 其中单词用逗号或句点分隔 string apple pear grapes carrot cabbage veggies fruit yard 我想根据逗号和句点来分割它 string apple pear grapes c
  • String.split() 的 ArrayIndexOutOfBoundsException

    这是从文件中读取输入的代码 该文件包含表单中的学生详细信息roll name age street city zipcode 其中很少有值可以null even 对于以下代码 我得到java lang ArrayIndexOutOfBoun
  • R - 分割数据帧而不删除 NA 值

    如果我有一个 df letter body part a head b head c NA d NA e left foot 我想将它分成 2 个 dfs 一个只有 body part head 另一个则包含其他所有内容 IE 列表 我可以
  • 将选择结果(一列)拆分为多列

    我一直在努力找出如何实现这一目标 但我认为我一开始就没有能力知道要寻找什么 我正在使用现有系统 我无法更改数据库架构 也无法规定用户如何输入数据 我必须利用我们现有的资源来工作 目前 我们的用户正在将统计数据放入表中的一个文本字段中 他们使
  • 使用通配符分割字符串

    我有一个变量字符串 其中包含我需要的值和拆分器 问题是 字符串的长度是可变的 分割器的类型也是可变的 它们通过 XML 文件到达 字符串将如下所示 1 20 51 2 name jpg 但也可以是 1 20 51 name jpg 坚实的因
  • 按字符分割字符串

    scala 有一个标准的分割字符串的方法StringOps split 但它的行为有点让我惊讶 演示一下 使用快捷便利功能 def sp str String str split toList 以下表达式全部计算结果为 true sp Li
  • 如何分割字符串并在ant脚本的for循环中使用它?

    我在 ant 属性中有一个机器 IP 列表

随机推荐

  • 序列切片

    序列切片 切片 切片就是指对操作对象 截取 其中一部分的操作 字符串 列表 元祖 有序序列 都支持切片操作 基本语法 顾头不顾尾 序列名称 span class token punctuation span 开始位置下标 span clas
  • 阿里云领取免费2H2G云服务器&证书分享(一):Apsara Clouder云计算专项技能认证:云服务器ECS入门

    这个证书是你领服务器一个月内要考的 xff0c 内容也不难 新老用户都能领 xff0c 要求是有学生认证 当然这个证书是独立的 xff0c 你也可以不认证直接考 点击这个链接 阿里云飞天计划 跳转到阿里云飞天计划 领的服务器如果想不到要做什
  • 卷积神经网络的旋转不变性理解

    卷积神经网络本身的设计对旋转不变性没有进行专门的考虑 xff0c 只不过max pooling可以稍微补偿一下这个功能 xff0c 只是角度变化太大 xff0c 可能会作用不大 xff0c 但因为max pooling并不是为此而设计的 x
  • VS code + Win10 Linux子系统(Ubuntu)开发ESP32

    Windows开发ESP32 最近在研究EPS32 xff0c 但是和STM32之类的单片机不同 xff0c 国内资料大多是在arduino上的简单修改 xff0c 想开发底层硬件比较困难 xff1b 而官方提供的eclipse集成环境体积
  • malloc和calloc的区别

    malloc和calloc的区别有两点 xff1a 两个函数的参数不一样 malloc只有1个参数 xff0c 而calloc有两个参数内存分配后初始化不一样 calloc会把分配的内存全部初始化为0 xff0c 而malloc没有初始化操
  • ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

    欢迎关注大数据和人工智能技术文章发布的微信公众号 xff1a 清研学堂 xff0c 在这里你可以学到夜白 xff08 作者笔名 xff09 精心整理的笔记 xff0c 让我们每天进步一点点 xff0c 让优秀成为一种习惯 xff01 有时候
  • CSDN完整导出pdf博客内容,去除冗余,仅保留blog

    本文完全参考自其它博客 xff1a 新CSDN文章转成PDF 打印 去空白 IT说的博客 CSDN博客 如何将CSDN的文章导出为pdf xff1f 我的blog屋 CSDN博客 csdn导出pdf 原博客代码执行后还保留了博客作者栏 xf
  • WSL2连接调用USB设备

    声明 xff1a 本文教程来源于微软官网WSL教程 xff0c 链接地址 xff1a Connect USB devices 最近在学OpenCV xff0c 发现微软的WSL是个好东西 xff0c 结合VS Code编辑器 xff0c 无
  • 树莓派使用code-server遇到的问题

    code server在树莓派上使用是没有问题的 xff0c 只要保证树莓派系统较新 xff0c 一般不会遇到什么问题 1 以下一系列出现的问题 xff0c 都与系统环境比较旧有关 xff1a code进程一直100 占用CPU浏览器建立V
  • Mysql插入JSON串会被去一层转义

    Mysql插入JSON串会被去一层转义 问题描述 背景 xff1a 在数据库更新 新增一个字段为JSON串的时候 xff0c 被去一层转义 xff0c 导致程序解析失败 xff0c 报错 原JSON串 span class token pu
  • VS保存并生成解决方案

    一个小技巧 xff0c 提高开发效率 xff0c 使开发更迅速 为您节约更多时间 xff0c 去陪恋人 家人和朋友 背景 xff1a 使用VS工具开发 调试时需要右键项目 xff0c 生成或者重新生成解决方案 而时常大脑高速运作 xff0c
  • mysql分组排序取第一条数据

    需求 xff1a mysql 根据某一个字段分组 xff0c 然后组内排序 xff0c 最后每组取排序后的第一条数据 1 先使用 xff08 分组字段 43 排序字段 xff09 排序 相当于实现了分组和排序 xff0c 只是没有根据分组字
  • 设置 edge 浏览器跨域

    执行下面两条命令 xff0c 然后重启edge span class token string 34 C Program Files x86 Microsoft span class token entity title E span dg
  • 最简单的基于FFmpeg的AVfilter例子(水印叠加)

    61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • FFmpeg源代码简单分析:avio_open2()

    61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • n6005/n5105在debian11实现jellyfin硬解

    n6005 n5105在debian11实现jellyfin硬解 inter集成显卡debian11默认不支持硬解 xff0c 可按以下方式正确开启 1 环境 软件 delbian11 硬件 n6005 docker环境 安装jellyfi
  • ModuleNotFoundError: No module named 'cv2'

    ModuleNotFoundError No module named 39 cv2 39 解决方法 xff1a pip install opencv python
  • C++实现链表逆序

    链表的结构 lt pre name 61 34 code 34 class 61 34 html 34 gt lt pre name 61 34 code 34 class 61 34 cpp 34 gt struct listnode i
  • 初始化我的archlinux

    初始化我的archlinux 进入tty模式 xff0c ctrl 43 alt 43 f12 设置镜像 sudo vim etc pacman conf 开机archlinuxcn manjaro archlinuxcn The Chin
  • C语言实现Split函数

    借助C语言的动态内存分配 xff0c 实现类似VB中Split函数的效果 结构体介绍 xff1a IString xff1a 参数 str 字符串数组的指针 参数 num 字符串个数 函数介绍 功能 xff1a 按一个字符来拆分字符串 参数