C语言提取被特定字符分隔的字符串中的内容

C语言中通常可以使用sscanf与strtok进行对制定的分隔符进行分割。sscanf函数的缺陷是对于1;2;3;;;4这样分割符中间没有值的情况处理不好(sscanf(str, "%*[^;];%[^;]",a))。可能存在其它的方式进行分割,目前不对此讨论。

typedef struct split_str_struct
{
    char *str;
    unsigned short length;
}SPLITSTRUCT;

以上声明一个字符串分割结构体,用作字符分割用。

字符分割函数:

static  unsigned short StringSplit(char *instr, char *token, SPLITSTRUCT *out_strs)
{
    char *start = instr;
    char *end = NULL;
    int ind = 0;

    if(!instr || !instr[0])
        return -1;

    end = strstr(start, token);
    while(end != NULL) {
        out_strs[ind].str = start;
        out_strs[ind].length = end - start;

        ind ++;
        start = end + strlen(token);
        end = strstr(start, token);
    }
    out_strs[ind].str = start;
    out_strs[ind].length = strlen(start);

    return ind + 1;
}

使用时,首先定义个结构体数组,其数组大小视能分割出多少内容而定。

SPLITSTRUCT sub_strings[10];

然后调用函数。并且提取其中的内容,假设我们要提取使用;分割的第二与第三个内容。

    char tmp1[MAX_LEN + 1] = {0};
    char tmp2[MAX_LEN + 1] = {0};
    StringSplit(buffer, ";", sub_strings);
    if (sub_strings[1].length > 0 || sub_strings[1].length < MAX_LEN) {
        strncpy(tmp1, sub_strings[1].str, sub_strings[1].length);
        tmp1[sub_strings[1].length] = ‘\0‘;
    }
    if (sub_strings[2].length > 0 || sub_strings[2].length < MAX_LEN) {
        strncpy(tmp2, sub_strings[2].str, sub_strings[2].length);
        tmp2[sub_strings[2].length] = ‘\0‘;
    }    

即可提取出内容。

时间: 2024-08-02 06:04:09

C语言提取被特定字符分隔的字符串中的内容的相关文章

c语言代码编程题汇总:把字符串中的内容逆置

字符串中的内容逆置  程序代码如下: 1 /* 2 2017年3月5日14:48:11 3 功能:把字符串的内容逆置 4 */ 5 6 #include"string.h" 7 #include "stdio.h" 8 #define N 81 9 void fun(char *s) 10 { 11 int i, n = strlen(s)-1; //strlen()是求字符串全部元素个数包括最后的'\0'(字符串结尾的字符),而strlen()-1表达式所求得是数

JS取出特定字符前后的字符串,针对一串自负里面的单个字符前后的字符串

//针对一串自负里面的单个字符前后的字符串<!doctype html> <html> <head> <meta charset="utf-8"> <title>分割字符串</title> </head> <script type="text/javascript"> /* string 字符串; str 指定字符; split(),用于把一个字符串分割成字符串数组; s

php中判断一个字符是否在字符串中

strpos() - 查找字符串在另一字符串中第一次出现的位置(区分大小写) stripos() - 查找字符串在另一字符串中第一次出现的位置(不区分大小写) strrpos() - 查找字符串在另一字符串中最后一次出现的位置(区分大小写) strripos() - 查找字符串在另一字符串中最后一次出现的位置(不区分大小写) 参数:strripos(string,find,start)string:必需.规定要搜索的字符串.find:必需.规定要查找的字符.start:可选.规定开始搜索的位置.

取两个特定字符之间的字符串

str='创刊:;1981;类别:;工程科技I;周期:;双月刊;发行:;北京;语言:;中文 ;起订时间:;曾用名:;膜分离科学与技术;出版社:;公司类;邮编:;100029;主编:;李守荣;邮发:;54-40;库存:;200' pattern = re.compile ('发行:;(.*);语言:') pub_place = pattern.findall (str) pub_place = ''.join (pub_place).strip () 原文地址:https://blog.51cto

【C语言】编写一个程序统计输入字符串中: 各个数字、空白字符、以及其他所有字符出现的次数。

#include <stdio.h> int main() { char s[20]; char num=0; int num_count=0; int space_count=0; int other_count=0; while((num=getchar())!='\n') {  if(num>='0'&&num<='9')           {              num_count++;           }           else if(n

将集合中对象按特定符号分隔成字符串

List<String> list =new ArrayList(); list.add("ab"); list.add("cd"); String str = Joiner.on(",").join(list); 最终结果:str=ab,cd 添加gradle依赖:compile group:'com.google.guava',name:"guava",version:20.0 原文地址:https://www

字符数组-返回字符串中的某个子串的开始位置,不使用string头文件-C

简单的来讲就是把字符串进行比较,从第一个相同的位置开始,之后逐个比对,直到不相同为止,此时比较相同字符数目与子串长度的关系,相同则返回第一个相同位置,否则返回-1 1 #include<stdio.h> 2 3 int find_substr(char *mainstr,char *substr); 4 5 int main(void) 6 { 7 if(find_substr("C is fun!","is")==-1) 8 { 9 printf(&q

c语言代码编程题汇总:将字符串中的大写字母转换成小写字母

将字符串中的大写字母转换成小写字母 程序代码如下: 1 /* 2 2017年3月8日21:21:46 3 功能:将字符串中的大写字母转换成小写字母 4 */ 5 /* 6 #include"stdio.h" 7 8 int main() 9 { 10 int n = 0; 11 12 char a[100]; 13 14 printf("please input a string:"); 15 16 gets(a); 17 18 for(int i = 0 ;a[i

c语言代码编程题汇总 :统计字符串中的大写和小写字母的个数

统计字符串中的大写和小写字母的个数 程序代码如下: 1 /* 2 2017年3月6日19:42:21 3 功能:统计字符串中的大写和小写字母的个数 4 */ 5 6 #include "stdio.h" 7 void fun (char *,int *,int *); 8 9 int main (void) 10 { 11 int m = 0,n = 0; 12 int *Pm = &m, *Pn = &n; 13 char s[100]; 14 printf (&qu