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

C語言字符串進階操作:刪除指定字符、去首字符、翻轉字符串

     編輯:關於C

標準庫 <string.h> 提供了 strcpy、strcat、strstr 等基礎接口,但實際開發中常遇到更靈活的需求:刪除字符串中所有數字、刪除首字符、刪除指定字符、字符串左右翻轉 等。本文匯總多種實用字符串處理函數,附帶完整代碼與測試。

核心函數實現

1. 刪除字符串中所有數字

void del_str_Num(char *str) {
    int i = 0, j = 0;
    while (str[i] != '\0') {
        if (str[i] < '0' || str[i] > '9') {  // 非數字字符保留
            str[j++] = str[i];
        }
        i++;
    }
    str[j] = '\0';
}

2. 刪除字符串首部指定字符(如空格)

char *ltrim(char *s, char c) {
    while (*s != '\0' && *s == c) s++;
    return s;
}

3. 刪除字符串中所有指定字符(多種實現風格)

版本 A:雙指針原地覆蓋

char *delstr_c(char *s, char c) {
    char *p = s, *q = s;
    for (; *p != '\0'; p++) {
        if (*p != c) *q++ = *p;
    }
    *q = '\0';
    return s;
}

版本 B:標準庫風格

void del_str_c(char s[], int c) {
    int i, j;
    for (i = 0, j = 0; s[i] != '\0'; i++) {
        if (s[i] != c) s[j++] = s[i];
    }
    s[j] = '\0';
}

4. 字符串左右翻轉(原地交換首尾字符)

char *strfilp(char *str) {
    char *h = str;
    char *t = str;
    char ch;

    // t 移動到字符串最後一個有效字符(跳過 \0)
    while (*t++) ;  // t 指向 \0 後一位
    t--;            // 回到 \0
    t--;            // 回到最後一個字符

    while (h < t) {
        ch = *h;
        *h++ = *t;
        *t-- = ch;
    }
    return str;
}

綜合測試主程序

int main() {
    char str[20] = "23.3hhlo965";
    char *str1 = "hello";

    del_str_c(str, '.');      // 刪除 '.'
    printf("刪除 '.' 後: %s\n", str);  // 233hhlo965

    del_str_Num(str);         // 刪除所有數字
    printf("刪除數字後: %s\n", str);   // hhlo

    strfilp(str);             // 翻轉字符串
    printf("翻轉後: %s\n", str);       // olhh

    return 0;
}

運行結果

刪除 '.' 後: 233hhlo965
刪除數字後: hhlo
翻轉後: olhh

函數對比與選擇建議

功能推薦函數特點
刪除首部特定字符ltrim返回新起始指針,不修改原內存,適合去空格
刪除所有指定字符delstr_c / del_str_c原地修改,雙指針高效,版本 B 更直觀
刪除所有數字del_str_Num專用優化,可擴展為刪除任意字符集
字符串翻轉strfilp原地交換,O(n) 時間,O(1) 空間

總結

掌握這些字符串進階操作,能顯著提升處理文本數據的效率。核心技巧在於雙指針原地修改:一個指針讀取,一個指針寫入,最後補 \0。翻轉則是首尾雙指針向中間交換。實際項目中,建議將常用操作封裝為工具庫,注意邊界條件(空字符串、全匹配字符等)的處理。

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