用C语言来分割字符串
来源:互联网 发布:网络建设与管理很累吗 编辑:程序博客网 时间:2024/06/06 04:29
#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;}
以下转自:http://hi.baidu.com/nivrrex/blog/item/180d5bb5f9e403c936d3ca2f.html
[C语言]字符串处理 - 以指定的字符串分割字符串(支持中文字符)2008-11-8: 函数StringSplit(分割字符串到一个字符串数组中,其中该数组第0位为分割后字符串的个数)2008-11-10: 函数StringSplit_Struct(以定义一个新结构的方式来实现该函数)/*C代码如下*/#include <stdio.h>/*实现方案1*//*分割字符串到一个字符串数组中,其中该数组第一位为分割后的个数*/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*//*为方便计数定义的结构,字符串数组从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(){ /*进行测试*/ /*方案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;}
- 用C语言来分割字符串
- C语言字符串分割
- C语言分割字符串
- C 语言分割字符串
- C语言字符串分割函数
- c语言实现字符串分割
- c语言的字符串分割
- c语言实现字符串分割
- C语言的字符串分割
- C语言字符串的分割
- C语言之分割字符串
- C语言 strtok 字符串分割
- C语言字符串的分割
- C语言标准字符串分割
- c利用strtok来进行字符串分割
- C 语言使用特定字符分割字符串
- C语言分割字符串函数strtok
- C语言中的字符串分割函数
- JavaMail的常用类介绍
- Nagios-linux下远程监控软件的安装
- 【shell】shell 编程基础
- oracle 检查点(checkpoint)
- 制作你自己的gem
- 用C语言来分割字符串
- IDD与新添加的类
- ajax+js+dom+json+php+mysql 实现google suggest效果
- Oracle归档日志删除
- ajax+js+dom+json+php+mysql 实现google suggest效果
- WinCE中的RAM-Based Registry与HIVE-Based Registry
- java中char类型转换成int类型
- ASP.NET找不到可安装的 ISAM (小错误,大问题)!
- JS带链接的滚动字幕