用C语言来分割字符串

相关:http://www.cnblogs.com/roucheng/p/cfenge.html

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

#include <stdio.h>  
int main()  
{  
    char str1[10] = {0};  
    char str2[10] = {0};  
    char str3[10] = {0};  
    sscanf("1,2,3#3,4#4,5","%[^#]#%[^#]#%[^#]", str1, str2,str3);  
    printf("The split result is:\n%s\n%s\n%s\n",str1, str2,str3);  
    return 0;  
}  /* 何问起 hovertree.com */
//[C语言]字符串处理 - 以指定的字符串分割字符串(支持中文字符)  
  
//2008-11-8: 函数StringSplit(分割字符串到一个字符串数组中,其中该数组第0位为分割后字符串的个数)  
//2008-11-10: 函数StringSplit_Struct(以定义一个新结构的方式来实现该函数)  
/*C代码如下*/  
#include <stdio.h>  
  
/*实现方案1*/  /* 何问起 hovertree.com */
/*分割字符串到一个字符串数组中,其中该数组第一位为分割后的个数*/  
char** StringSplit(const char* string,const char* split)  
{  
     char** result;  
     /*首先分配一个char*的内存,然后再动态分配剩下的内存*/  
     result = (char * * )malloc(sizeof(char *)*1);  
     memset(result,0,sizeof(char *)*1);  
     /*定义一个遍历用的指针和一个寻找位置用的指针*/  
     char* p = string;  
     char* pos = string;  
     /*无论是否存在该分割串,绝对都会分割到一个字符串*/  
     int count = 1;  
     while(*p != '\0')  
     {  
         char* temp;  
         char* tt;  
         /*查找该字符串*/  
         pos = strstr(p,split);  
         /*结果为0说明剩下的字符串中没有该字符了*/  
         if(pos == 0)  
         {  
           result = (char * * )realloc(result,sizeof(char *)*(count+2));  
           result[0] = count;  
           result[count] = p;  
           result[count+1] = NULL;  
           return result;  
         }  
         /*分配临时字符串空间*/  
         temp = (char * )malloc(sizeof(char)*(pos - p+1));  
         memset(temp,0,sizeof(char)*(pos - p+1));  
         /*设置头指针,以便赋值时使用*/  
         tt = temp;  
         while(p<=pos)  
         {  
           *temp++ = *p++;  
         }  
         /*将字符串结尾置零*/  
         *--temp = '\0';  
         result = (char * * )realloc(result,sizeof(char *)*(count+1));  
         result[0] = count;  
         result[count] = tt;  
         count++;  
         /*设置下一次遍历时的指针(重要)。当split长度大于1时,不这样设置会多赋值不必要的字符串*/  
         p +=strlen(split)-1;  
     }  
     return result;  
}  
/*实现方案2*/  /* 何问起 hovertree.com */
/*为方便计数定义的结构,字符串数组从0开始赋值*/  
typedef struct{  
     int number;        /*分割的字符串个数*/  
     char** string;        /*字符串数组*/  
}StringTab;  
/*分割字符串到一个字符串数组中*/  
StringTab StringSplit_Struct(const char* string,const char* split)  
{  
     StringTab result;  
     /*首先分配一个char*的内存,然后再动态分配剩下的内存*/  
     result.string = (char * * )malloc(sizeof(char *)*1);  
     memset(result.string,0,sizeof(char *)*1);  
     /*无论是否存在该分割串,绝对都会分割到一个字符串*/  
     result.number = 0;  
     /*定义一个遍历用的指针和一个寻找位置用的指针*/  
     char* p = string;  
     char* pos = string;  
     while(*p != '\0')  
     {  
        char* temp;  
        char* tt;  
        /*查找该字符串*/  
        pos = strstr(p,split);  
        /*结果为0说明剩下的字符串中没有该字符了*/  
        if(pos == 0)  
        {  
          result.string = (char * * )realloc(result.string,sizeof(char *)*(result.number+1));  
          result.string[result.number] = p;  
          return result;  
        }  
        /*分配临时字符串空间*/  
        temp = (char * )malloc(sizeof(char)*(pos - p+1));  
        memset(temp,0,sizeof(char)*(pos - p+1));  
        /*设置头指针,以便赋值时使用*/  
        tt = temp;  
        while(p<=pos)  
        {  
          *temp++ = *p++;  
        }  
        /*将字符串结尾置零*/  
        *--temp = '\0';  
        result.string = (char * * )realloc(result.string,sizeof(char *)*(result.number+1));  
        result.string[result.number] = tt;  
        /*计数器加一*/  
        result.number++;  
        /*设置下一次遍历时的指针(重要)。当split长度大于1时,不这样设置会多赋值不必要的字符串*/  
        p +=strlen(split)-1;  
     }  
     return result;  
}  
  
int main()  
{  
     /*进行测试*/ /* 何问起 hovertree.com */ 
     /*方案1测试*/  
     char** array;  
     array = StringSplit("a/aaa//哈aa","aaa");  
     int i ;  
     for(i=1;i<=(int)array[0];i++)  
     {  
         printf("Num:%d I:%d: Value: %s\n",array[0],i,array[i]);  
     }  
     
     array = StringSplit("a/aa哈a//哈aa","");  
     for(i=1;i<=(int)array[0];i++)  
     {  
         printf("Num:%d I:%d: Value: %s\n",array[0],i,array[i]);  
     }  
  
     /*方案2测试*/  
     StringTab array2;  
     array2 = StringSplit_Struct("a/aaa//哈aa","aaa");  
     for(i=0;i<=array2.number;i++)  
     {  
        printf("Num:%d I:%d: Value: %s\n",array2.number,i,array2.string[i]);  
     }  
     array2 = StringSplit_Struct("a/aa哈a//哈aa","");  
     for(i=0;i<=array2.number;i++)  
     {  
        printf("Num:%d I:%d: Value: %s\n",array2.number,i,array2.string[i]);  
     }  
  
     return 0;  
} 

相关:http://www.cnblogs.com/roucheng/p/cfenge.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120345.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月27日 上午9:00
下一篇 2021年12月27日 上午9:00


相关推荐

  • 深度学习中模型计算量(FLOPs)和参数量(Params)的理解以及四种计算方法总结

    深度学习中模型计算量(FLOPs)和参数量(Params)的理解以及四种计算方法总结深度学习中模型参数量和计算量的理解与计算 首先什么是计算量 什么是参数量 如何计算 参数量 计算量 对于换算计算量 对于各个经典网络 计算量与参数量对于硬件要求 6 计算量 FLOPs 和参数量 Params 第一步 安装模块第二步 计算参考资料接下来要分别概述以下内容 首先什么是参数量 什么是计算量 如何计算 参数量 如何统计 计算量 换算参数量 把他换算成我们常用的单位 比如 mb 对于各个经典网络 论述他们是计算量大还是参数两 有什么好处 计算量 参数量分别对显存 芯

    2026年3月19日
    2
  • USB转232和485的区别

    1串口串口,即串行通信接口,与之相对应的另一种接口叫并口,并行接口。两者的区别是,传输一个字节(8个位)的数据时,串口是将8个位排好队,逐个地在1条连接线上传输,而并口则将8个位一字排开,分别在8条连接线上同时传输,也就是进行数据传输的接口串口是一种物理接口形式,(硬件)通常指COM接口,当然这些接口有着很多标准接口标准:串口通信的接口标准有很多,而我们所了解的RS-23…

    2022年4月7日
    82
  • mac xquartz+iterm2

    mac xquartz+iterm21.下载并安装xquartz2.配置过程参考3.点击xquartz右键自定义添加一个命令指向iterm2我这里添加的是/Applications/iTerm.app/Contents/MacOS/iTerm24.选择刚刚添加的iterm2运行,但是这样只能在xquartz中运行。此时输入echo$DISPLAY发现是:0.0,打开bash_profile…

    2025年5月26日
    15
  • Docker 离线安装_docker官方中文文档

    Docker 离线安装_docker官方中文文档docker离线安装流程

    2026年4月14日
    4
  • 即梦ai agent使用教程

    即梦ai agent使用教程

    2026年3月12日
    3
  • 详解CALayer的anchorPoint和position[通俗易懂]

    详解CALayer的anchorPoint和position[通俗易懂]CALayerCALayer属于QuartzCore框架,用于在iOS和MacOS系统上可见元素的绘制,和属于UIKit框架的UIView的关系是,UIView默认会创建一个CALayer属性,用于图象的绘制和显示.当然,CALayer也可以单独创建.区别UIView可以处理用户交互事件,而CALayer不行.CALayer具备以下UIView没有的功能:阴影,圆角,边框 …

    2022年10月8日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号