用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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • win10多合一原版系统_win10多合一原版系统[通俗易懂]

    win10多合一原版系统_win10多合一原版系统[通俗易懂]win10多合一原版系统装机系统拥有着大多数同类型定位的装机系统所没有的强大稳定性可以确保系统在运行的过程中绝对不会因为一些小毛病而出现崩溃的现象,对win10多合一原版系统装机系统感兴趣的朋友们快下载吧。win10多合一原版系统介绍:1、在不影响大多数软件和硬件操作的情况下,尽可能关闭不必要的服务。2、电脑兼容通用驱动助手,可以智能判断硬件类型并安装最兼容的驱动。3、综合2000-2020年流行…

    2022年6月16日
    82
  • div滚动条

    div滚动条##设置div内容溢出滚动overflower:auto(内容溢出的时候出现滚动条;scroll会一直出现滚动条)#滚动条样式##滚动条组成:-webkit-scrollbar滚动条整体部

    2022年7月4日
    20
  • js编写HTML通过document.cookie写入不了cookie的问题[通俗易懂]

    js编写HTML通过document.cookie写入不了cookie的问题[通俗易懂]js中通过document.cookie写入不了cookie的问题使用VScode编写HTML应用cookie进行存储,发现编写无法读取到cookie的内容,即未能实现cookie存储。作为新手问题,可以考虑这个原因:只有当用在服务器或者本地的服务器中的时候,才能使用这个方法写入cookie,所以VScode没有使用服务器方式?这个原因可以通过方案一尝试解决:打开VScode,点击左侧扩展,输入liveserver,点击安装即可;安装成功后再VS界面右下角可以看到相应提示

    2022年7月16日
    61
  • java有什么作用_Java有什么用「建议收藏」

    java有什么作用_Java有什么用「建议收藏」1.可以62616964757a686964616fe58685e5aeb931333431353261做WEB系统,如网站,不过做网站就有点杀鸡用牛刀了。用的最多的就是用JAVA做管理系统,很容易维护。2。可以做C/S非WEB管理系统,当然其他语言也能做到。3。可以做移动设备软件,如手机软件,MP4软件等等。4。当然你WINDOWS下做好了一个东西,拿到其他地方也能用,如LINUX,NUIX等等…

    2022年7月8日
    15
  • javastream流详解_Java获取文件流的所有方式

    javastream流详解_Java获取文件流的所有方式一、Stream流引入Lambda表达式,基于Lambda所带来的函数式编程,又引入了一个全新的Stream概念,用于解决集合类库既有的鼻端。(Lambda表达式详解在上篇博客内容)现有一个需求:将list集合中姓张的元素过滤到一个新的集合中然后将过滤出来的姓张的元素中,再过滤出来长度为3的元素,存储到一个新的集合中1.用常规方法解决需求/…

    2022年10月6日
    0
  • Linux下解压rar文件

    Linux下解压rar文件[本地环境]操作系统:Ubuntu14.0464bitsLinux操作系统环境下不支持rar文件的解压,需要安装rar压缩文件的Linux版本,下载地址:http://www.rarlab.com/download.htm下载后进入解压目录下,进行安装:rar的解压命令如下:#将*****.rar压缩文件解压到当前文件目录rare*****.r

    2022年7月11日
    15

发表回复

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

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