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

C 語言統計字符類型個數:數字、大小寫字母、空格、其他字符完整實現

     編輯:關於C語言

C 語言統計字符類型個數:數字、大小寫字母、空格、其他字符完整實現

經典 C 語言基礎練習:讀取一行輸入(以換行符結束),分類統計 0-9、a-z、A-Z、空格、其他字符的出現次數。本文提供規範代碼、邏輯解析、輸出格式化技巧。

核心代碼

#include 

int main() {
    int digit[10] = {0}, lower[26] = {0}, upper[26] = {0};
    int space = 0, other = 0;
    int ch;

    printf("請輸入一行字符(回車結束):\n");
    while ((ch = getchar()) != '\n' && ch != EOF) {
        if (ch >= '0' && ch <= '9') digit[ch - '0']++;
        else if (ch >= 'a' && ch <= 'z') lower[ch - 'a']++;
        else if (ch >= 'A' && ch <= 'Z') upper[ch - 'A']++;
        else if (ch == ' ') space++;
        else other++;
    }

    // 格式化輸出:每行 3 項
    auto print_arr = [](const char *label, int *arr, int n, int base) {
        printf("\n%s:\n", label);
        for (int i = 0; i < n; i++) {
            printf(" '%c':%-4d", base + i, arr[i]);
            if ((i+1) % 3 == 0) printf("\n");
        }
        if (n % 3) printf("\n");
    };
    // C99 不支持 lambda,實際用函數或宏展開
    printf("\n數字統計:");
    for (int i=0;i<10;i++) { printf(" %d:%d", i, digit[i]); if((i+1)%3==0) printf("\n"); }
    printf("\n小寫字母統計:");
    for (int i=0;i<26;i++) { printf(" %c:%d", 'a'+i, lower[i]); if((i+1)%3==0) printf("\n"); }
    printf("\n大寫字母統計:");
    for (int i=0;i<26;i++) { printf(" %c:%d", 'A'+i, upper[i]); if((i+1)%3==0) printf("\n"); }
    printf("\n空格數: %d\n其他字符數: %d\n", space, other);
    return 0;
}

關鍵技術點

  1. 字符分類:利用 ASCII 碼連續區間 '0'-'9'、'a'-'z'、'A'-'Z',通過 ch - '0' 映射數組下標,O(1) 分類。
  2. 輸入處理:getchar() 逐字符讀取,遇 '\n' 或 EOF 終止,避免 scanf 格式化掃描跳過空白字符的問題。
  3. 計數器初始化:int arr[N] = {0}; 靜態初始化全零,避免未定義行為。
  4. 輸出美化:取模控制換行,對齊列寬,提升可讀性。

擴展:使用 ctype.h 標準庫函數

#include 
if (isdigit(ch)) digit[ch-'0']++;
else if (islower(ch)) lower[ch-'a']++;
else if (isupper(ch)) upper[ch-'A']++;
else if (isspace(ch)) space++;
else other++;

優勢:與 Locale 相關,支持非 ASCII 字符集(如 UTF-8 多字節需配合 mbrtowc)。

進階:統計任意文件字符頻度

FILE *fp = fopen("text.txt", "r");
int ch;
while ((ch = fgetc(fp)) != EOF) { /* 同分類邏輯 */ }
fclose(fp);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved