首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言字符串操作習題集:遍歷、查找、統計、比較與子串查找完整解析

     編輯:程式設計綜合問答

本文整理了一組經典的 C 語言字符串操作習題,涵蓋遍歷、逆序、查找、統計、庫函數對應、自定義 strindex、strcmp、不區分大小寫比較、判斷互為逆序等核心知識點,並提供標準實現與詳細註釋,適合初學者鞏固指針與數組操作。

習題與解答

1. 遍歷字符串輸出每個字符

void traversal(char s[]) {
    for (int i = 0; s[i] != '\0'; i++)
        printf("%c\n", s[i]);
}

2. 逆序輸出字符

void reverse_print(char s[]) {
    int len = strlen(s);
    for (int i = len - 1; i >= 0; i--)
        printf("%c\n", s[i]);
}

3. 查找字符首次出現位置

int find(char word[], char letter) {
    for (int i = 0; word[i] != '\0'; i++)
        if (word[i] == letter) return i;
    return -1;
}

4. 三參數版 find:指定起始下標查找

int find(char word[], char letter, int start) {
    for (int i = start; word[i] != '\0'; i++)
        if (word[i] == letter) return i;
    return -1;
}

5. 統計字符出現次數

int count(char s[], char letter) {
    int cnt = 0;
    for (int i = 0; s[i] != '\0'; i++)
        if (s[i] == letter) cnt++;
    return cnt;
}

6. 使用三參數 find 重寫 count

int count(char s[], char letter) {
    int cnt = 0, pos = 0;
    while ((pos = find(s, letter, pos)) != -1) {
        cnt++;
        pos++; // 從下一位繼續找
    }
    return cnt;
}

7. 常用字符串庫函數對應

功能ANSI C 庫函數
字符串轉大寫無標準函數,常用 toupper 逐字符轉換
查找字符位置strchr
查找子串位置strstr

8. 自定義子串查找 strindex

int strindex(char s[], char t[]) {
    int i, j, k;
    for (i = 0; s[i] != '\0'; i++) {
        for (j = i, k = 0; t[k] != '\0' && s[j] == t[k]; j++, k++);
        if (t[k] == '\0' && k > 0) return i;
    }
    return -1;
}

邏輯:外層遍歷主串起始位,內層同時推進主串與子串比較,若子串走到末尾(t[k]=='\0')且匹配長度>0,返回起始下標。

9. 字符串比較 strcmp(字典序)

int strcmp(char s[], char t[]) {
    int i;
    for (i = 0; s[i] == t[i]; i++)
        if (s[i] == '\0') return 0;
    return s[i] - t[i];
}

10. 不區分大小寫比較 strcmp_ignore_case

int strcmp_ignore_case(char s[], char t[]) {
    int i;
    for (i = 0; toupper(s[i]) == toupper(t[i]); i++)
        if (s[i] == '\0') return 0;
    return toupper(s[i]) - toupper(t[i]);
}

11. 判斷兩字符串是否互為逆序(修正版)

int is_reverse(char s[], char t[]) {
    int len = strlen(s);
    if (len != strlen(t)) return 0;
    for (int i = 0, j = len - 1; i < len; i++, j--)
        if (s[i] != t[j]) return 0;
    return 1;
}

原代碼錯誤:j=strlen(t) 越界,應為 len-1;循環條件 j>0 應為 i<len。

學習建議

  • 熟練掌握 \0 結束標誌與下標邊界。
  • 多用紙筆模擬指針/下標走位,理解雙重循環邏輯。
  • 對比自定義函數與庫函數(strchr、strstr、strcmp),理解底層實現。

這組習題涵蓋了 C 語言字符串處理的核心技巧,反覆練習能顯著提升指針與數組操作能力。

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