C語言提取被特定字符分隔的字符串中的內容

C語言中一般能夠使用sscanf與strtok進行對制定的分隔符進行分割。sscanf函數的缺陷是對於1;2;3;;;4這樣分割符中間沒有值的狀況處理很差(sscanf(str, "%*[^;];%[^;]",a))。可能存在其它的方式進行分割,目前不對此討論。數組

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

以上聲明一個字符串分割結構體,用做字符分割用。函數

字符分割函數:spa

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;
}

使用時,首先定義個結構體數組,其數組大小視能分割出多少內容而定。code

 SPLITSTRUCT sub_strings[10]; blog

而後調用函數。而且提取其中的內容,假設咱們要提取使用;分割的第二與第三個內容。token

    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';
    }    

便可提取出內容。字符串

相關文章
相關標籤/搜索