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

HDU 1219 AC Me:字母頻率統計入門題

     編輯:C++ 入門

經典字符串處理:讀多行輸入(每行長度 ≤ 100,000),統計每行中 a-z 出現次數,按格式 字母:次數 輸出,每行結束輸出空行。

算法

  1. 整行讀取 getline(含空格、標點)
  2. 大小為 26 的整型數組 cnt 歸零
  3. 遍歷字符,isalpha(c) 判斷字母,轉小寫 tolower(c),cnt[c-'a']++
  4. 按序輸出 a:cnt[0] 到 z:cnt[25],每項換行
  5. 處理完一行輸出額外空行

代碼 (C++)

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    string line;
    while (getline(cin, line)) {
        array cnt{};  // C++11 聚合初始化為 0
        for (char ch : line) {
            if (isalpha(static_cast(ch))) {
                cnt[tolower(static_cast(ch)) - 'a']++;
            }
        }
        for (int i = 0; i < 26; ++i) {
            cout << char('a' + i) << ':' << cnt[i] << '\n';
        }
        cout << '\n';
    }
    return 0;
}

關鍵點

點處理
輸入結束while(getline(cin,line)) 自動處理 EOF
大小寫tolower 統一轉小寫
非字母isalpha 過濾,需轉 unsigned char 避免負值 UB
輸出格式每項獨立行,測試用例間空行
性能O(行長),array 避免動態分配,ios::sync_with_stdio(false) 加速 IO

樣例

輸入:
hello, this is my first acm contest!
work hard for hdu acm.

輸出:
a:1
b:0
c:2
...
z:0

a:2
b:0
c:1
...
z:0

此題是字符統計、流處理、格式輸出的基礎綜合訓練,適合 ACM 入門練習。

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