top1编程
← 返回题目
题解

字符统计

1 条题解

  • 0
    @ 2026-8-5 14:38:11

    解题思路

    小童要学会"数数"的本领:把一段英文里的大写字母和小写字母分别数出来。

    想象我们手里有一串珠子,珠子上刻着各种字符,有数字、空格、标点,还有字母。我们要做的,就是把珠子一颗一颗拿起来看:

    • 如果是大写字母 A~Z,就放进"大写盒子"里;
    • 如果是小写字母 a~z,就放进"小写盒子"里;
    • 其他的(数字、空格、标点)不管它。

    怎么判断一个字符是不是大写字母呢?只要判断它是不是在 A 和 Z 之间就行,写成代码就是 c >= 'A' && c <= 'Z'。小写字母同理,判断 c >= 'a' && c <= 'z'。

    读入的时候要注意:这段英文里有空格,普通 cin >> s 遇到空格就会停下来,读不全。所以我们要用 cin.get(c),它能把空格也一起读进来,直到把整段文字读完(读到文件结束 EOF)才停。

    最后把两个盒子里的数量用空格隔开输出就大功告成啦!

    参考代码

    // 字符统计:统计一段英文中大写字母和小写字母的个数
    #include <iostream>
    using namespace std;
    int main(){
        char c;
        int big=0, small=0; // big记录大写字母个数,small记录小写字母个数
        // cin.get(c) 能逐个读入字符,包括空格,读到文件结束为止
        while(cin.get(c)){
            if(c>='A'&&c<='Z') big++;   // 是大写字母就+1
            if(c>='a'&&c<='z') small++; // 是小写字母就+1
        }
        cout<<big<<" "<<small<<endl; // 两个数用空格隔开输出
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:我们从头到尾把每个字符检查一遍,如果字符串长度是 n,就需要做 n 次判断,所以是 O(n)。
    • 空间复杂度:只用了两个计数器,不管字符串多长都用这么多空间,所以是 O(1)。
    • 1