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

C++ 統計字串中字元出現次數:ASCII 陣列計數法

     編輯:關於C語言

問題描述

輸入一行字串,統計每個可見字元(含空白、標點)出現的次數並輸出。

核心思路:直接定址計數

利用 ASCII 碼範圍(0-255)建立固定大小整數陣列 int count[256] = {0},遍歷字串,以字元的 ASCII 值為索引直接遞增對應計數器。時間複雜度 O(n),空間複雜度 O(1)。

完整代碼

#include <iostream>
#include <string>
using namespace std;

int main() {
    string str;
    int ascii[256] = {0};  // 自動零初始化

    cout << "請輸入一個字串:";
    getline(cin, str);     // 讀取整行(含空白)

    for (size_t i = 0; i < str.size(); ++i) {
        ++ascii[static_cast<unsigned char>(str[i])];
    }

    for (int i = 0; i < 256; ++i) {
        if (ascii[i] != 0) {
            cout << static_cast<char>(i)
                 << " 出現:" << ascii[i] << endl;
        }
    }
    return 0;
}

關鍵細節

  • getline 而非 cin >> str,保留空白字元。
  • static_cast<unsigned char> 避免 char 有號時產生負索引(未定義行為)。
  • 輸出時同樣轉換回 char 顯示字元。
  • 陣列大小 256 涵蓋擴展 ASCII;若需支援 Unicode,改用 unordered_map<char32_t, int>。

擴展:Unicode 版本

#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;

int main() {
    string str;
    cout << "請輸入字串:";
    getline(cin, str);

    unordered_map<char32_t, int> freq;
    // 簡易 UTF-8 解碼略過,實際建議用 ICU 或 C++20 std::u8string
    for (char c : str) ++freq[static_cast<unsigned char>(c)];

    for (auto& [ch, cnt] : freq)
        cout << ch << " 出現:" << cnt << '\n';
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved