You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 14:12:02