控制台输出始终显示0的程序问题修复求助
控制台输出始终显示0的程序问题修复求助
看起来你在实现字符串分组统计累加的功能时卡壳了,输出一直是0,我帮你揪出代码里的几个关键问题,再给你修复后的方案:
第一个致命问题:转小写导致大写统计全为0
你把StringBuilder生成的字符串转成了全小写:string data = sb.ToString().ToLower();,这之后data里所有字符都是小写的,后面用char.IsUpper(data[i])判断大写时,永远不会返回true,upper变量一直是0,最后upper * lower当然就是0了。
第二个问题:分组逻辑完全不符合需求
你的分组是把大小写不同的同一字母当成不同组(比如"aA"会被拆成'a'和'A'两个组),但你实际需要的是把同一个字母(不管大小写)归为一组。而且你现在的代码没有对每个组单独计算后累加,只是把整个错误分组后的字符统计了一次,完全没实现需求里的分组计算逻辑。
修复后的完整代码
我重新写了核心逻辑,完美匹配你的需求:
// 可以替换成你需要的测试用例 string[] letters = { "a", "aA", "Aa", "AAa", "aaA", "aAabB", "ccCeEEEcBbBbb" }; foreach (string input in letters) { int total = 0; if (string.IsNullOrEmpty(input)) { Console.WriteLine(total); continue; } // 初始化第一组的字母标识和计数 char currentGroupLetter = char.ToLower(input[0]); int upperCount = char.IsUpper(input[0]) ? 1 : 0; int lowerCount = char.IsLower(input[0]) ? 1 : 0; // 从第二个字符开始遍历 for (int i = 1; i < input.Length; i++) { char currentChar = input[i]; char currentCharLower = char.ToLower(currentChar); if (currentCharLower == currentGroupLetter) { // 属于当前组,更新大小写计数 if (char.IsUpper(currentChar)) upperCount++; else lowerCount++; } else { // 遇到新组,先把当前组的结果加到总数值里 total += upperCount * lowerCount; // 初始化新组的信息 currentGroupLetter = currentCharLower; upperCount = char.IsUpper(currentChar) ? 1 : 0; lowerCount = char.IsLower(currentChar) ? 1 : 0; } } // 别忘了把最后一组的结果也加入总数值 total += upperCount * lowerCount; Console.WriteLine($"输入: {input} | 结果: {total}"); }
代码逻辑说明
- 用小写字母作为分组的标识,确保同一字母(不管大小写)被分到同一组
- 每遇到新的字母组,就把前一组的
大写数量 × 小写数量累加到总结果中 - 遍历结束后,必须手动把最后一组的计算结果加入总数值(因为循环里不会处理最后一组)
- 直接对原字符判断大小写,避免了转小写导致的统计错误
运行这个代码,所有测试用例都会输出正确结果:比如"aA"会输出1,你给的示例"ccCeEEEcBbBbb"会输出11,完全符合你的需求。
备注:内容来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

