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

C語言實作 substr 子字串擷取函式

     編輯:關於C語言

函式規格

int substr(char dst[], char src[], int start, int len);
  • 從 src 起始位置向後偏移 start 字元處開始複製。
  • 最多複製 len 個非 NUL 字元到 dst。
  • 複製結束後 dst 必須以 '\0' 結尾。
  • 回傳實際存入 dst 的字串長度。

完整實作

#include 
#include 
#include 

int substr(char dst[], char src[], int start, int len) {
    assert(dst != NULL);
    assert(src != NULL);

    int ret = 0;
    /* 移動 src 指標到起始位置 */
    while (start--) {
        src++;
    }

    /* 若剩餘長度不足 len,調整 len */
    if (strlen(src) < len) {
        len = strlen(src);
    }
    ret = len;

    /* 複製字元 */
    while (len--) {
        *dst++ = *src++;
    }
    *dst = '\0';          // 結尾補 NUL
    return ret;
}

int main() {
    char *p = "bit-tech";
    char arr[10];
    int ret = substr(arr, p, 4, 5);   // 從索引 4 開始取 5 字元 → "tech"
    printf("%d\n", ret);              // 4(實際可取長度)
    printf("%s\n", arr);              // tech
    system("pause");
    return 0;
}

邏輯說明

  1. 參數檢查:assert 確保指標非空。
  2. 定位起始:while(start--) src++; 將 src 移至目標起始位址。
  3. 長度修正:若剩餘字元少於 len,以實際剩餘長度為準。
  4. 逐字複製:while(len--) *dst++ = *src++;。
  5. 補終止符:*dst = '\0'; 確保 dst 為合法 C 字串。

注意事項

  • start 為 0 基索引;若超出字串長度,strlen(src) 為 0,函式回傳 0 且 dst 為空字串。
  • 呼叫端需確保 dst 空間足夠(至少 len+1)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved