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

C 語言通用去除字串首尾空白字元函數庫實作(支援多字元集合)

     編輯:關於C語言

函數族群設計

提供六個函數,涵蓋左側、右側、雙側修剪,支援字元集合(filter 字串)與單一字元(ch)兩種模式:

  • int ltrim_str(char *str, const char *filter);
  • int rtrim_str(char *str, const char *filter);
  • int trim_str(char *str, const char *filter);
  • int ltrim_ch(char *str, char ch);
  • int rtrim_ch(char *str, char ch);
  • int trim_ch(char *str, char ch);

回傳值:成功回傳移除字元總數,參數為 NULL 回傳 -1。

核心實作

// 左修剪:字元集合版
int ltrim_str(char *str, const char *filter) {
    if (!str || !filter) return -1;
    char *ptr = str;
    while (*ptr && strchr(filter, *ptr)) ++ptr;
    strcpy(str, ptr);
    return ptr - str;
}

// 右修剪:字元集合版
int rtrim_str(char *str, const char *filter) {
    if (!str || !filter) return -1;
    int len = strlen(str), i;
    for (i = len - 1; i >= 0; --i)
        if (!strchr(filter, str[i])) break;
    str[i + 1] = '\0';
    return len - i - 1;
}

// 雙側修剪:組合左右
int trim_str(char *str, const char *filter) {
    if (!str || !filter) return -1;
    return ltrim_str(str, filter) + rtrim_str(str, filter);
}

// 單一字元版本:直接比較 *ptr != ch / str[i] != ch,其餘邏輯相同

使用範例

char s1[] = "  111abcde*+*+";
char s2[] = "  111abcde*+*+";

ltrim_str(s1, "1 ");   // 移除前導 '1' 與空白 → "abcde*+*+"
rtrim_str(s1, "*+");   // 移除尾部 '*' '+' → "abcde"

trim_str(s2, "*+1 ");  // 一次移除首尾所有指定字元 → "abcde"

設計優勢

  1. 原地修改,無額外記憶體配置。
  2. 字元集合支援,一次可指定多種要移除的字元(如空白、換行、定位字元 " \t\r\n")。
  3. 回傳移除計數,方便呼叫端判斷是否實際修改。
  4. 參數檢查,防禦性程式設計。

延伸應用

可擴充為 trim_str_ex(str, filter, flags),支援 TRIM_LEFT, TRIM_RIGHT, TRIM_BOTH 旗標,或整合至字串工具庫中。

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