首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言實現字符串分割並動態返回所有子串數組

     編輯:關於C語言

C語言實現字符串分割並動態返回所有子串數組

函數 char **split(char *mother, char split_char) 按指定字符分割字符串,返回以空字符串結尾的動態分配子串指針數組。

核心邏輯

  1. 掃描 mother,遇到分隔符將緩衝區 buf 內容 malloc 複製到 arry[j],j++。
  2. 連續分隔符產生空子串時跳過(len_sub==0 繼續)。
  3. 掃描結束處理最後一段非空子串。
  4. 在 arry 末尾添加一個指向空字符串的指針作為結束標記。

關鍵代碼

char **split(char *mother, char split_char) {
    char *arry[1024];
    char buf[1024] = {0};
    int i, j=0, k=0;
    for (i=0; i<strlen(mother); i++) {
        if (mother[i] == split_char) {
            if (strlen(buf) > 0) {
                arry[j] = malloc(strlen(buf)+1);
                strcpy(arry[j++], buf);
                memset(buf, 0, sizeof(buf)); k=0;
            }
        } else { buf[k++] = mother[i]; }
    }
    if (strlen(buf) > 0) {  // 最後一段
        arry[j] = malloc(strlen(buf)+1);
        strcpy(arry[j++], buf);
    }
    arry[j] = malloc(1); arry[j][0] = '\0';  // 結束標記
    return arry;  // 注意:返回棧上數組指針,實際使用需改為動態分配或靜態存儲
}

主程序調用並遍歷打印:while(strlen(ss[i])) printf("%s\n", ss[i++]);。注意棧上數組返回指針的生命週期問題,工程中應動態分配 arry 或改為輸出參數。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved