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

C 語言統計字符串中字母與數字個數:多種實現方式對比

     編輯:程式設計疑難解答

問題描述

輸入一行字符串,統計其中英文字母(不區分大小寫)與數字字符的個數。要求可使用 `while` 循環或其他便捷方法。

方案一:標準庫函數 `isalpha`、`isdigit`(推薦)

包含 ``,代碼可讀性強,自動處理字符集相關邏輯。

#include 
#include 

int main() {
    char str[1024];
    int letters = 0, digits = 0;
    printf("請輸入字符串:");
    fgets(str, sizeof(str), stdin); // 安全替代 gets()
    for (int i = 0; str[i] != '\0'; i++) {
        if (isalpha(str[i])) letters++;
        else if (isdigit(str[i])) digits++;
    }
    printf("字母: %d, 數字: %d\n", letters, digits);
    return 0;
}

方案二:ASCII 碼範圍判斷(無庫依賴)

#include 

int main() {
    char str[1024];
    int letters = 0, digits = 0;
    fgets(str, sizeof(str), stdin);
    for (int i = 0; str[i]; i++) {
        char ch = str[i];
        if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')) letters++;
        else if (ch >= '0' && ch <= '9') digits++;
    }
    printf("字母: %d, 數字: %d\n", letters, digits);
    return 0;
}

方案三:`while` 循環指針遍歷

char *p = str;
while (*p) {
    if (isalpha(*p)) letters++;
    else if (isdigit(*p)) digits++;
    p++;
}

關鍵注意點

  • 禁用 `gets()`:不檢查緩衝區邊界,極易導致緩衝區溢出漏洞,C11 標準已移除。務必使用 `fgets()`。
  • 處理換行符:`fgets` 會讀入 `\n`,統計時會被忽略(非字母非數字),無需特殊處理。
  • 字符編碼:上述方法針對 ASCII/UTF-8 兼容字符。若需支持中文統計,需使用寬字符 `wchar_t` 或第三方庫(如 ICU)。

總結

統計字符類型的本質是遍歷字符串、逐字符分類計數。推薦使用 `ctype.h` 標準庫函數,代碼簡潔、可移植、符合現代 C 規範。牢記 `gets()` 危險,養成 `fgets()` 安全習慣。

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