輸入一行字串,統計每個可見字元(含空白、標點)出現的次數並輸出。
利用 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 顯示字元。unordered_map<char32_t, int>。#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';
}