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

C 語言子字串擷取函數實作:手動實現 substr 功能

     編輯:關於C語言

C 語言子字串擷取函數實作:手動實現 substr 功能

函數原型

// 從 src 索引 start (1-based) 開始,複製 len 個字元到 dst
// 返回實際複製長度
int substr(char dst[], const char src[], int start, int len);

完整實作

#include <stdio.h>
#include <string.h>

int substr(char dst[], const char src[], int start, int len) {
    if (start < 1) start = 1;
    int src_len = strlen(src);
    if (start > src_len) { dst[0] = '\0'; return 0; }

    int max_copy = src_len - start + 1;
    if (len > max_copy) len = max_copy;

    for (int i = 0; i < len; ++i) {
        dst[i] = src[start - 1 + i];
    }
    dst[len] = '\0'; // 確保結尾
    return len;
}

int main() {
    char src[100], dst[100];
    int start, len;

    printf("輸入字串 (長度<100): ");
    fgets(src, sizeof(src), stdin);
    src[strcspn(src, "\n")] = '\0'; // 移除換行

    printf("起始位置 (1-based): ");
    scanf("%d", &start);
    printf("複製長度: ");
    scanf("%d", &len);

    int copied = substr(dst, src, start, len);
    printf("子字串: %s (長度 %d)\n", dst, copied);
    return 0;
}

關鍵點解析

  • 1-based 索引:符合人類直覺,內部轉為 0-based。
  • 邊界檢查:防止 start 超出範圍、len 超過剩餘長度。
  • 空字元終止:dst[len] = '\0' 確保輸出為合法 C 字串。
  • 安全輸入:使用 fgets 而非 gets,避免緩衝區溢位。

標準庫替代方案

C 標準庫無 substr,但可用 strncpy 搭配手動加 \0,或 C++ std::string::substr。

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