C#统计txt文件字符出现次数(禁用Dictionary、LinQ,支持双排序)
实现代码
using System; using System.Collections.Generic; using System.IO; using System.Text.RegularExpressions; public class CharCounter { // 并行存储字母和对应出现次数的列表 private List<char> listOfChar = new List<char>(); private List<int> listOfRepetitions = new List<int>(); public void TestChar() { // 读取文件并预处理:转大写、过滤非字母字符 string text = File.ReadAllText(@"C:\Ecole\Session 2\Prog\Bloc 4\test.txt")?.ToUpper(); if (string.IsNullOrEmpty(text)) { Console.WriteLine("文件内容为空"); return; } text = Regex.Replace(text, @"[^a-zA-Z]", ""); // 统计字母出现次数 foreach (char item in text) { if (listOfChar.Contains(item)) { int pos = listOfChar.IndexOf(item); listOfRepetitions[pos] += 1; } else { listOfChar.Add(item); listOfRepetitions.Add(1); } } // 按字母顺序排序输出 SortByCharAsc(); OutputResult(); Console.WriteLine(); // 按出现次数降序排序输出 SortByCountDesc(); OutputResult(); } // 字母升序排序(冒泡排序实现,无Linq依赖) private void SortByCharAsc() { int n = listOfChar.Count; for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (listOfChar[j] > listOfChar[j + 1]) { // 同步交换字母和对应计数 char tempChar = listOfChar[j]; listOfChar[j] = listOfChar[j + 1]; listOfChar[j + 1] = tempChar; int tempCount = listOfRepetitions[j]; listOfRepetitions[j] = listOfRepetitions[j + 1]; listOfRepetitions[j + 1] = tempCount; } } } } // 次数降序排序(冒泡排序实现,无Linq依赖) private void SortByCountDesc() { int n = listOfChar.Count; for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (listOfRepetitions[j] < listOfRepetitions[j + 1]) { // 同步交换计数和对应字母 int tempCount = listOfRepetitions[j]; listOfRepetitions[j] = listOfRepetitions[j + 1]; listOfRepetitions[j + 1] = tempCount; char tempChar = listOfChar[j]; listOfChar[j] = listOfChar[j + 1]; listOfChar[j + 1] = tempChar; } } } } // 格式化输出结果 private void OutputResult() { for (int i = 0; i < listOfChar.Count; i++) { Console.WriteLine($"{listOfChar[i]}={listOfRepetitions[i]}"); } } }
说明
- 保留原有统计逻辑的基础上,修复了原代码空文本访问报错的问题,去掉了冗余的首循环跳过逻辑
- 两种排序均用基础冒泡算法实现,全程未使用Dictionary、Linq相关语法,完全符合作业要求
- 采用并行列表同步交换的方式,保证排序过程中字母和对应计数的映射关系不会错乱
- 输入
hello world测试时输出结果与题目给出的预期完全一致
内容的提问来源于stack exchange,提问作者QcRaphRoseQc
相关产品推荐
相关产品推荐

