用C语言来分割字符串
#include <stdio.h>
int main()
{
char str1[] = {};
char str2[] = {};
char str3[] = {};
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 ;
} /* 何问起 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 *)*);
memset(result,,sizeof(char *)*);
/*定义一个遍历用的指针和一个寻找位置用的指针*/
char* p = string;
char* pos = string;
/*无论是否存在该分割串,绝对都会分割到一个字符串*/
int count = ;
while(*p != '\0')
{
char* temp;
char* tt;
/*查找该字符串*/
pos = strstr(p,split);
/*结果为0说明剩下的字符串中没有该字符了*/
if(pos == )
{
result = (char * * )realloc(result,sizeof(char *)*(count+));
result[] = count;
result[count] = p;
result[count+] = NULL;
return result;
}
/*分配临时字符串空间*/
temp = (char * )malloc(sizeof(char)*(pos - p+));
memset(temp,,sizeof(char)*(pos - p+));
/*设置头指针,以便赋值时使用*/
tt = temp;
while(p<=pos)
{
*temp++ = *p++;
}
/*将字符串结尾置零*/
*--temp = '\0';
result = (char * * )realloc(result,sizeof(char *)*(count+));
result[] = count;
result[count] = tt;
count++;
/*设置下一次遍历时的指针(重要)。当split长度大于1时,不这样设置会多赋值不必要的字符串*/
p +=strlen(split)-;
}
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 *)*);
memset(result.string,,sizeof(char *)*);
/*无论是否存在该分割串,绝对都会分割到一个字符串*/
result.number = ;
/*定义一个遍历用的指针和一个寻找位置用的指针*/
char* p = string;
char* pos = string;
while(*p != '\0')
{
char* temp;
char* tt;
/*查找该字符串*/
pos = strstr(p,split);
/*结果为0说明剩下的字符串中没有该字符了*/
if(pos == )
{
result.string = (char * * )realloc(result.string,sizeof(char *)*(result.number+));
result.string[result.number] = p;
return result;
}
/*分配临时字符串空间*/
temp = (char * )malloc(sizeof(char)*(pos - p+));
memset(temp,,sizeof(char)*(pos - p+));
/*设置头指针,以便赋值时使用*/
tt = temp;
while(p<=pos)
{
*temp++ = *p++;
}
/*将字符串结尾置零*/
*--temp = '\0';
result.string = (char * * )realloc(result.string,sizeof(char *)*(result.number+));
result.string[result.number] = tt;
/*计数器加一*/
result.number++;
/*设置下一次遍历时的指针(重要)。当split长度大于1时,不这样设置会多赋值不必要的字符串*/
p +=strlen(split)-;
}
return result;
} int main()
{
/*进行测试*/ /* 何问起 hovertree.com */
/*方案1测试*/
char** array;
array = StringSplit("a/aaa//哈aa","aaa");
int i ;
for(i=;i<=(int)array[];i++)
{
printf("Num:%d I:%d: Value: %s\n",array[],i,array[i]);
} array = StringSplit("a/aa哈a//哈aa","哈");
for(i=;i<=(int)array[];i++)
{
printf("Num:%d I:%d: Value: %s\n",array[],i,array[i]);
} /*方案2测试*/
StringTab array2;
array2 = StringSplit_Struct("a/aaa//哈aa","aaa");
for(i=;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=;i<=array2.number;i++)
{
printf("Num:%d I:%d: Value: %s\n",array2.number,i,array2.string[i]);
} return ;
}
相关:http://www.cnblogs.com/roucheng/p/cfenge.html
用C语言来分割字符串的更多相关文章
- Swift3.0语言教程分割字符串与截取字符串
Swift3.0语言教程分割字符串与截取字符串 Swift3.0语言教程分割字符串 如果想要快速的创建一个数组,我们可以将字符串进行分割,分割后的内容将会生成一个数组.在NSString中有两个分割字 ...
- C语言分割字符串
最近在做一道C语言题目的时候需要用到分割字符串,本来想自己手写的,也不会很麻烦,但想到其他语言都有分割字符串的库函数,C语言怎么会没有呢?所以,在网上搜了一搜,果然有这样的函数,还是很好用的,在此总结 ...
- LinuxC语言读取文件,分割字符串,存入链表,放入另一个文件
//file_op.c #include <string.h> #include <stdio.h> #include <stdlib.h> struct info ...
- R语言︱文本(字符串)处理与正则表达式
处理文本是每一种计算机语言都应该具备的功能,但不是每一种语言都侧重于处理文本.R语言是统计的语言,处理文本不是它的强项,perl语言这方面的功能比R不知要强多少倍.幸运的是R语言的可扩展能力很强,DN ...
- R语言中的字符串处理函数
内容概览 尽管R是一门以数值向量和矩阵为核心的统计语言,但字符串有时候也会在数据分析中占到相当大的份量. R语言是一个擅长处理数据的语言,但是也不可避免的需要处理一些字符串(文本数据).如何高 ...
- Go语言中的字符串处理
1 概述 字符串,string,一串固定长度的字符连接起来的字符集合.Go语言的字符串是使用UTF-8编码的.UTF-8是Unicode的实现方式之一. Go语言原生支持字符串.使用双引号(“”)或反 ...
- 【R笔记】R语言中的字符串处理函数
内容概览 尽管R是一门以数值向量和矩阵为核心的统计语言,但字符串同样极为重要.从医疗研究数据里的出生日期到文本挖掘的应用,字符串数据在R程序中使用的频率非常高.R语言提供了很多字符串操作函数,本文仅简 ...
- Tcl/Tk语言学习------拆分字符串
字符串的拆分 前言 字符串的处理是每种语言经常会遇到的问题,tcl作为一门脚本语言自然也不例外,关于字符串的拆分,一般会有两种情况:1.使用单个字符拆分,2.使用字符串拆分. 1.使用单个字符拆分字符 ...
- Delphi中stringlist分割字符串的用法
Delphi中stringlist分割字符串的用法 TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. 常规的用法大家都知道,现在来讨论它的一些高级的用法. 1.CommaT ...
随机推荐
- Linux split拆分文件
200 ? "200px" : this.width)!important;} --> 介绍 split可以将一个大文件拆分成指定大小的多个文件,并且拆分速度非常的快,拆分一 ...
- WPF路线图白皮书: 2015及未来
介绍 当2006年微软首次推出Windows Presentation Foundation(WPF)时,它代表了应用程序的设计和开发又向前跨出了巨大的一步.它简化了GUI应用程序的开发,有助于UI和 ...
- Android开发学习之路-回调实现Service向activity传递数据
开启服务的时候,如果我们是通过bindService来绑定服务并且要向服务传递数据,可以直接在Intent中设置bundle来达到效果,但是如果是我们需要从服务中返回一些数据到Activity中的时候 ...
- Atitit 泛型原理与理解attilax总结
Atitit 泛型原理与理解attilax总结 1. 泛型历史11.1.1. 由来11.2. 为什么需要泛型,类型安全21.3. 7.泛型的好处22. 泛型的机制编辑22.1.1. 机制32.1.2. ...
- iOS-UICollectionView
1--------------------------------------------------------------------------------------------------- ...
- IDEA开发多项目的示例
前言:慢慢习惯用IDEA了,觉得用起来确实还不错,有VS的感觉,但是缺点就是每次启动慢,如果修改以后反应也需要好久,这方面做得不好.但是职能提示个人觉得要比Eclipse好太多.好了现在我用IDEA来 ...
- -bash: /usr/local/bin/react-native: No such file or directory
执行react-native run-android/run-ios的时候出现 -bash: /usr/local/bin/react-native: No such file or director ...
- Entity Framework 5中应用表值函数进行Linq查询
Entity Framework 5引入了表值函数(Table-Valued Functions TVFs).表值函数的返回类型是一个Table类型,可用在SQL查询语句中.最简单的表值函数,读取客户 ...
- 如何在windows 10 x64安装佳能 CP900 驱动
佳能太无耻,为了销售CP910 , CP900 到win8 ,win8.1,win 10 都没有驱动程序,网上找的方法都不行,IT民工自有办法: 1.按住shift键,重启电脑 restart 2.在 ...
- 【Android】YUV使用总结 —— Android常用的几种格式:NV21/NV12/YV12/YUV420P的区别
工作问题接触到图像这一块,需要对手机摄像头采集的原始帧做Rotate或者scale,但无奈对此的了解少之又少,于是网上搜了一顿,完事后将最近所学总结一下,以方便之后的人别踩太多坑. 首先想 ...