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中拆分列?

    我也想以同样的方式拆分同一列 我想按如下方式执行此操作 但它无法正常工作 我使用的代码是t38kbat read table test38kbat txt header FALSE head t38kbat t38kbat lt separ
  • 将数据分割或子集为 30 分钟的间隔

    我有以下形式的数据框 Temp Depth Light x time date time at depth 104 18 59 2 7 27 21 38 2012 06 20 4 109 18 59 2 7 27 22 02 2012 06
  • 如何根据第 i 个字段的值对 numpy 数组进行切片?

    我有一个 2D numpy 数组 有 4 列和很多行 gt 10000 这个数字不固定 我需要创建n按其中一列的值划分子数组 我发现的最接近的问题是如何按列值对 Numpy 数组进行切片 https stackoverflow com qu
  • PostgreSQL 9.3:将一列拆分为多列

    我想拆分一列colb在下面给出的示例中分为两列 喜欢column1 and column2 我有一个包含两列的表 Example create table t3 cola varchar colb varchar 插入 insert int
  • 如何在 Ruby 中拆分字符串并获取除第一个之外的所有项目?

    字符串是ex test1 test2 test3 test4 test5 当我使用 ex split first 它返回 test1 现在我想获取剩余的项目 即 test2 test3 test4 test5 如果我使用 ex split
  • 从 pyspark 中的数据帧列中删除最后一个管道分隔值

    我正在使用 Spark 2 1 并且有一个数据框列包含类似的值AB 12 XY 4 我想通过删除最后一个元素来创建一个新列 所以它应该显示为AB 12 XY 我尝试拆分 rsplit 不起作用 因此需要一些建议才能获得所需的输出 使用 Sp
  • 使用 GNU Parallel 和 Split

    我正在将一个相当大的文件加载到 postgresql 数据库中 为此 我首先使用split在文件中获取较小的文件 每个 30Gb 然后我使用以下命令将每个较小的文件加载到数据库中GNU Parallel and psql copy 问题是大
  • Java正则表达式 - 在空格上分割字符串 - 忽略引号中的空格和转义引号[重复]

    这个问题在这里已经有答案了 我正在寻找正则表达式来在Java中执行以下操作 String originalString String splitString originalString spilt regex 一些测试用例 Origina
  • 在 R 中 split() 之后保持数据的原始顺序[重复]

    这个问题在这里已经有答案了 在下面的 R 代码中 我split a data frame通过一列 一个名为的字符串变量study name But split 按字母顺序重新订购原来的data frame In BASE R 分割后数据可以
  • 按元素数量拆分子列表中的列表

    在 python 中 如果我有元素列表 l a b c d e f 和一个数字列表 n 2 1 3 我如何拆分列表l通过中的数字n 并获取这个列表列表 a b c d e f 你可以使用islice gt gt gt from iterto
  • 如何在R中将文本拆分为两个有意义的单词

    这是我的数据框 df 中的文本 其中有一个名为 problem note text 的文本列 SSCIssue 钞票分配器故障执行检查 分配器故障 要求商店取出钞票分配器并将其放回去 仍然错误消息说前门已打开 因此 CE attn req联
  • 在 HTML5 websocket 服务器中切割媒体流,用于基于网络的聊天/视频会议应用程序

    我们目前正在开发一个聊天 文件共享 视频会议应用程序使用 HTML5 websocket https stackoverflow com questions 4220672 implementing webbased real time v
  • 从 split 切换到 preg_split 时 php preg_split 错误

    在从 split 更改为 preg split 以获得 php 5 3 兼容性后 我从 php 收到此警告 PHP Warning preg split Delimiter must not be alphanumeric or backs
  • python 拆分而不创建空白

    我明白为什么使用 split 创建空白很重要 这要归功于这个问题 https stackoverflow com questions 2197451 why are empty strings returned in split resul
  • 每次向量元素变化时在 R 中分割向量

    每次元素值发生变化时 我都需要分割重复元素组的向量 例如 test vector lt c string1 string1 string1 string2 string2 string1 string1 string3 必须成为 1 1 s
  • Lua中按字符分割字符串

    我有像这样的字符串 ABC DEF 我需要将它们分开 字符并将两个部分分别分配给一个变量 在 Ruby 中 我会这样做 a b ABC DEF split 显然Lua没有这么简单的方法 经过一番挖掘后 我找不到一种简短的方法来实现我所追求的
  • 如何在 Python 中将图像分割成多个部分

    我正在尝试使用 PIL 将一张照片分成多块 def crop Path input height width i k x y page im Image open input imgwidth im size 0 imgheight im
  • 拆分具有多行文本和单行文本的行

    我试图弄清楚如何拆分数据行 其中行中的 B C D 列包含多行 而其他列不包含多行 我已经弄清楚如何拆分多行单元格 如果我将这些列复制到新工作表中 手动插入行 然后运行下面的宏 仅适用于 A 列 但我在编码时迷失了休息 Here s wha
  • 在 C++ 中分割大文件

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

    我正在使用以下代码来处理我的数据 但最近我意识到使用skip 27 在数据开始之前跳过存储在我的文件中的信息 不是一个好的选择 因为每个文件中要跳过的行数不同我的目标是读取存储在多个文件夹中的各种txt文件 并非所有文件都有相同的列数 列的

随机推荐

  • 序列切片

    序列切片 切片 切片就是指对操作对象 截取 其中一部分的操作 字符串 列表 元祖 有序序列 都支持切片操作 基本语法 顾头不顾尾 序列名称 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 按一个字符来拆分字符串 参数