zoukankan      html  css  js  c++  java
  • 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] = '';
        }
        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] = '';
        }    

    即可提取出内容。

  • 相关阅读:
    服务限流原理及算法
    Kafka 与 RabbitMQ 如何选择使用哪个?
    分布式事务之最终一致性实现方案
    如何在Ubuntu 14.04中使用systemctl?
    postgresql13 for window 安装及备份还原数据
    手把手教大家在mac上用VMWare虚拟机装Ubuntu
    在Mac平台上使用Multipass安装Ubuntu虚拟机
    如何在markdown中插入js和css
    HTML5标签
    linux
  • 原文地址:https://www.cnblogs.com/fogcell/p/7417430.html
Copyright © 2011-2022 走看看