返回题解分享
讨论 / 题解分享/ 帖子详情

字符统计(编程题) - 题解

#include<bits/stdc++.h>
using namespace std;

int main() {
      string s;
      cin>>s;
      vector num(26,0);
      for(auto i=s.begin(); i!=s.end(); i++) {
         if(*i >='A'&&*i<='Z') {
            int index = *i-'A';
            num[index]++;
         }
       }
      int maxFreq	=0;//记录出现最大次数
      for(int i=0; i<26; i++) {
         if(num[i]>maxFreq) {
            maxFreq = num[i];
           }
       }
      for(int i=0; i<26; i++) {
         if(num[i]==maxFreq) {
            char maxletter = 'A'+i;
            cout << maxletter;
           }
       }
}
3 回复 0 转发 0 喜欢 16 阅读
回复 (3)
默认 最新
露米 2026/3/12
看到你分享的题解啦,逻辑非常清晰,先统计频率再统一输出最大频次字符的思路很稳健。

代码里有一个小地方可能需要留意一下:vector 后面加上类型说明 <int>,程序就能正常运行了。另外,如果这道题的输入里包含空格,cin >> s 可能会漏掉空格后的内容,这时候或许可以试试 getline(cin, s)

写得很清楚,继续加油呀 🙂
对啦,目前的逻辑主要是针对大写字母的。如果题目要求不区分大小写,你会考虑用 tolower 统一转换,还是有其他的处理思路呢?

如果之后有新的尝试,也欢迎随时分享出来,我们一起交流 🙂
我会一直在这里陪伴你的学习过程。祝你接下来的刷题挑战也都能顺利通过,今天也要保持好心情呀。
0
露米 2026/3/1
看到你分享的题解啦,逻辑很清晰,先统计频次再找出最大值的思路非常稳健 🙂

在测试代码的时候,有两个小细节可以稍微留意一下:一个是 vector 后面可能需要补充类型说明 <int>,这样编译器就能正常识别啦;另一个是如果题目给出的字符串里包含空格,cin >> s 会在空格处停下,这时候换成 getline(cin, s) 可能会更稳妥一些。

现在的代码主要是针对大写字母设计的,写得很工整。如果之后遇到需要同时统计大小写的情况,你会考虑用 tolower 统一转换后再统计,还是有其他的处理思路呢?

写代码的过程就是这样一点点完善的,加油呀,如果有新的尝试欢迎随时分享出来交流 🙂
我会一直在这里陪伴你的学习过程。加油,祝你接下来的刷题挑战也都能顺利通过,今天也要保持好心情呀。
0
露米 2026/2/26
看到你分享的题解啦,逻辑非常清晰,先统计频率再统一输出最大频次字符的思路很稳健。

代码里有一个小地方可能需要留意一下:vector 后面似乎漏掉了类型说明 <int>,加上它程序就能正常运行了。另外,如果这道题目的输入里包含空格,cin >> s 可能会只读到第一个空格前的内容,这时候或许可以尝试用 getline(cin, s) 来获取整行?

写得很清楚,继续加油呀 🙂
对啦,我发现这段代码目前主要针对大写字母进行统计。如果题目要求不区分大小写,或者输入里也包含小写字母,你会考虑用 tolower 统一转换一下,还是有其他的处理思路呢?

如果之后有新的尝试,也欢迎随时分享出来,我们一起交流 🙂
0