用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 ...
随机推荐
- Coding Kata - 挑战你的“底线”
Coding Kata简介 如何进行Kata练习 亲身感受 Coding Kata简介 前段时间听到一个比较有意思的概念叫做Coding Kata,今天试了一下来说说一些想法和思考.Kata是一个日语 ...
- DNS 正向查找与反向查找
原创地址:http://www.cnblogs.com/jfzhu/p/3996323.html 转载请注明出处 所谓正向查找,就是说在这个区域里的记录可以依据名称来查找对应的IP地址.反向查找就是在 ...
- linnux 3
kill [信号代码] 进程ID 以优雅的方式结束进程# kill -l PID-l选项告诉kill命令用好像启动进程的用户已注销的方式结束进程.当使用该选项时,kill命令也试图杀死所留下的子进程. ...
- underscore源码阅读记录(二)
引自underscore.js context参数用法 _.each(list, iteratee, [context]); context为上下文,如果传递了context参数,则把iterator ...
- ios 下创建,删除文件夹的方法
NSString *imageDir = [NSString stringWithFormat:@"%@/Caches/%@", NSHomeDirectory(), dirNam ...
- Mybatis入门例子
Mybatis是轻量级的持久化框架,的确上手非常快. Mybatis大体上的思路就是由一个总的config文件配置全局的信息,比如mysql连接信息等.然后再mapper中指定查询的sql,以及参数和 ...
- 不要怂,就是GAN (生成式对抗网络) (一)
前面我们用 TensorFlow 写了简单的 cifar10 分类的代码,得到还不错的结果,下面我们来研究一下生成式对抗网络 GAN,并且用 TensorFlow 代码实现. 自从 Ian Goodf ...
- D3.js 学习( 一)
<html> <head> <meta charset="utf-8"> <title>第三课:为柱形图添加坐标轴</titl ...
- HashMap和Hashtable的区别 源码分析
一:以前只知道HashMap和HashTable区别,死记硬背的记住HashMap 允许key value为空 而Hashtable 不允许为空 HashMap线程是非线程安全的,而Hashtable ...
- IOS开发之控件篇UITabBarControllor第二章 - 遮掩TableView问题
在IOS7.0以后UITabBar 里面放入一个UITableView会出现一个问题,Table会被TabBar掩盖了,当移动到最后一项的时候,永远看不到,如下面的例子,总共是99项,但是只能显示到9 ...