新手求助:统计字符串字母出现次数并返回最高频字符
解决方案(不调用额外库)
先给你指出现有代码的问题:
- 统计次数的代码:只在统计字符串第一个字符的出现次数,没有遍历所有不同字母来统计,没法得到每个字母的次数。
- 找最大值的代码:你现在是在比较字符本身的ASCII大小(比如
'z'比'a'大),根本没用到统计出来的次数,逻辑完全不对。
下面是不调用任何库的简单实现,分两步走:
1. 统计每个字母的出现次数
用一个长度为26的数组(对应a-z共26个小写字母)来存每个字母的次数。如果遇到大写字母,手动转成小写,然后计算对应数组的索引:字符 - 'a',比如'a'-'a'=0对应数组第0位,'b'-'a'=1对应第1位,以此类推。
2. 找出次数最多的字母
遍历次数数组,记录最大的次数值和对应的索引,最后把索引转成对应的字符(索引 + 'a')。
完整代码示例
using System; class Program { static void Main() { string s = "HelloWorldProgramming"; char mostFrequent = GetMostFrequentLetter(s); Console.WriteLine($"出现次数最多的字母是:{mostFrequent}"); } static char GetMostFrequentLetter(string s) { // 初始化26个位置的数组,存a-z的出现次数,初始值都是0 int[] countArray = new int[26]; // 遍历字符串每个字符,统计次数 for (int i = 0; i < s.Length; i++) { char c = s[i]; // 手动将大写字母转小写(ASCII中大写比小写小32) if (c >= 'A' && c <= 'Z') { c = (char)(c + 32); } // 只统计小写字母,忽略非字母字符(不需要的话可以删除这个判断) if (c >= 'a' && c <= 'z') { int index = c - 'a'; countArray[index]++; } } // 找出次数最多的字母 int maxCount = 0; char result = 'a'; // 默认初始值 for (int i = 0; i < countArray.Length; i++) { if (countArray[i] > maxCount) { maxCount = countArray[i]; result = (char)(i + 'a'); } } return result; } }
代码说明
- 统计部分:通过判断字符范围手动处理大小写转换,确保所有字母统一按小写统计,同时可选择忽略非字母字符。
- 找最大值部分:遍历次数数组,每次遇到更大的次数就更新记录值。如果有多个字母次数相同,会返回最先遇到的那个(比如a和b都出现5次时返回a)。
内容的提问来源于stack exchange,提问作者Nade
相关产品推荐
相关产品推荐

