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

C語言統計字符出現次數:從入門到進階完整指南

     編輯:關於C語言

題目需求

輸入一行字符(以 # 結束),統計字母 a 或 A 出現的總次數。

輸入範例: abcdefABCDEFaaAA#
輸出範例: 6

核心知識點

  • getchar() 逐字符讀取標準輸入
  • 字符數組緩衝輸入流
  • ASCII 碼比較:'A'==65, 'a'==97, '#'==35
  • 循環控制與條件判斷

標準解法(固定緩衝區)

#include <stdio.h>

int main() {
    char buf[500];
    int i = 0, count = 0;
    while (i < 500) {
        buf[i] = getchar();
        if (buf[i] == 'A' || buf[i] == 'a') count++;
        if (buf[i] == '#') break;
        i++;
    }
    printf("%d\n", count);
    return 0;
}

進階解法:統計所有字符頻次

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void count_all_chars(const char *s, int freq[256]) {
    for (int i = 0; s[i]; i++)
        freq[(unsigned char)s[i]]++;
}

int main() {
    char str[200];
    int freq[256] = {0};
    printf("請輸入字符串:");
    fgets(str, sizeof(str), stdin); // 安全讀取整行
    str[strcspn(str, "\n")] = '\0'; // 去除換行符
    
    count_all_chars(str, freq);
    
    printf("字符統計結果:\n");
    for (int i = 0; i < 256; i++)
        if (freq[i]) printf("'%c' (%3d): %d\n", 
            (i >= 32 && i <= 126) ? i : '?', i, freq[i]);
    return 0;
}

分類統計:數字、大寫、小寫、空格

void classify(const char *s, int cnt[4]) {
    for (int i = 0; s[i]; i++) {
        char c = s[i];
        if (c >= '0' && c <= '9') cnt[0]++;
        else if (c >= 'A' && c <= 'Z') cnt[1]++;
        else if (c >= 'a' && c <= 'z') cnt[2]++;
        else if (c == ' ') cnt[3]++;
    }
}

常見錯誤避坑指南

  • ❌ a = getchar() 直接賦值給數組名(數組名不可修改)
  • ❌ scanf("%s", a) 遇空白截斷,無法讀取含空格的行
  • ✅ 使用 fgets() 或循環 getchar() 讀取完整行
  • ✅ 緩衝區大小預留終止符空間
  • ✅ 處理 EOF 情況(getchar() 返回 EOF)

總結

字符統計是 C 語言基礎輸入處理的經典練習,掌握 getchar()、數組緩衝、ASCII 比較、循環控制四大核心,即可靈活應對各類統計需求。進階時可引入頻次數組、分類統計、安全輸入函數,提升代碼健壯性與擴展性。

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