You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需编写52个case统计文本中大小写字母的数量及种类?

如何不用52个case统计大小写字母的数量(C++实现)

完全不用写52个case,利用ASCII码的规律就能轻松搞定,给你两种实用的实现思路:

思路1:直接用ASCII码作为数组索引

大小写字母在ASCII表中是连续的固定区间:

  • 大写字母 A-Z 对应ASCII值 65-90
  • 小写字母 a-z 对应ASCII值 97-122

我们可以定义一个覆盖所有ASCII可见字符的数组,直接用字符的ASCII值作为下标计数,代码示例:

#include <iostream>
#include <cctype> // 用于判断是否为字母
#include <string>

using namespace std;

int main() {
    int count[128] = {0}; // 初始化所有计数为0
    string input;
    getline(cin, input); // 读取整行输入文本

    for (char c : input) {
        if (isalpha(c)) { // 先过滤非字母字符
            count[(unsigned char)c]++; // 用ASCII值作为下标累加计数
        }
    }

    // 输出大写字母统计结果
    cout << "大写字母统计:" << endl;
    for (char c = 'A'; c <= 'Z'; ++c) {
        if (count[(unsigned char)c] > 0) {
            cout << c << ": " << count[(unsigned char)c] << endl;
        }
    }

    // 输出小写字母统计结果
    cout << "\n小写字母统计:" << endl;
    for (char c = 'a'; c <= 'z'; ++c) {
        if (count[(unsigned char)c] > 0) {
            cout << c << ": " << count[(unsigned char)c] << endl;
        }
    }

    return 0;
}

注:(unsigned char)c 是为了避免部分扩展ASCII字符出现负值下标问题,确保索引合法。

思路2:将字母映射到0-51的索引(更节省空间)

如果不想用128位的数组,可以把大写字母映射到0-25区间,小写字母映射到26-51区间,用一个52位的数组存储:

#include <iostream>
#include <cctype>
#include <string>

using namespace std;

int main() {
    int count[52] = {0};
    string input;
    getline(cin, input);

    for (char c : input) {
        if (isupper(c)) {
            count[c - 'A']++; // 大写A对应0,B对应1...Z对应25
        } else if (islower(c)) {
            count[26 + (c - 'a')]++; // 小写a对应26,b对应27...z对应51
        }
    }

    // 输出大写统计
    cout << "大写字母统计:" << endl;
    for (int i = 0; i < 26; ++i) {
        if (count[i] > 0) {
            cout << (char)('A' + i) << ": " << count[i] << endl;
        }
    }

    // 输出小写统计
    cout << "\n小写字母统计:" << endl;
    for (int i = 26; i < 52; ++i) {
        if (count[i] > 0) {
            cout << (char)('a' + (i - 26)) << ": " << count[i] << endl;
        }
    }

    return 0;
}

这个逻辑和你统计数字的思路完全一致——数字是通过 c - '0' 得到0-9的索引,字母则通过 c - 'A' 或 c - 'a' 得到对应区间的索引,全程不需要switch分支。

内容的提问来源于stack exchange,提问作者tensshhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 15:25:26