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

C 語言實現 trim 去除字符串指定字符

     編輯:C 語言基礎

需求

標準庫無 trim,需自行實現:去除字符串中所有出現在 seps 集合中的字符。

基於 strtok 實現

#include 
#include 

char seps[] = " ";  // 要去除的字符集合

char* trim(char *dest, const char *src, const char *seps) {
    char *token = strtok((char*)src, seps);  // 注意:strtok 會修改源串
    *dest = '\0';
    while (token) {
        strcat(dest, token);
        token = strtok(NULL, seps);
    }
    return dest;
}

int main() {
    char result[1024];
    char str[] = "ab c d e f";
    printf("原串: %s\n", str);
    trim(result, str, seps);
    printf("結果: %s\n", result);  // abcdef
    return 0;
}

⚠️ 關鍵限制

  • strtok **會破壞源字符串**(插入 '\0'),傳入副本或可修改緩衝區
  • strtok 非線程安全(內部靜態狀態),多線程用 strtok_r
  • 僅適合「刪除所有分隔符」場景,**不保留原結構**

更通用的雙指針原地實現

char* trim_inplace(char *str, const char *seps) {
    char *read = str, *write = str;
    while (*read) {
        if (!strchr(seps, *read))
            *write++ = *read;
        read++;
    }
    *write = '\0';
    return str;
}

優點:不破壞源串結構(僅縮短)、線程安全、單遍歷 O(N)、原地操作 O(1) 空間。

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