题解
字符统计
1 条题解
-
0
解题思路
小童要学会"数数"的本领:把一段英文里的大写字母和小写字母分别数出来。
想象我们手里有一串珠子,珠子上刻着各种字符,有数字、空格、标点,还有字母。我们要做的,就是把珠子一颗一颗拿起来看:
- 如果是大写字母 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