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

來源:互聯網
上載者:User

標籤:short   buffer   ret   字串分割   ken   語言   tmp   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‘;    }    

即可提取出內容。

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.