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

如何用#分隔符实现用户输入?C#重复值检测代码报错求解决

解决C#中以#分隔的整数序列输入处理及重复值统计问题

原代码运行报错且存在逻辑缺陷,以下是问题分析和修正方案:

问题点梳理

  • Split方法调用错误:C#的string.Split没有直接接收字符串参数的重载,传入"#"会引发编译错误,需改用字符分隔符'#'或字符串数组重载。
  • 无效输入未处理:连续##会分割出空字符串,直接用Int32.Parse解析会抛出格式异常;同时未校验用户输入的内容是否为有效整数。
  • 重复值统计逻辑偏差:原代码仅统计连续重复的分组数,若同一值非连续出现(如1#2#1)无法正确识别,且未排除空字符串带来的无效元素。

修正后的代码

public class Program
{
    public static void Main(string[] args)
    {  
        Console.WriteLine("===========================");

        Console.WriteLine("Please enter single line containing a list of integers, separated by '#':");
        string userInput = Console.ReadLine();

        if (!string.IsNullOrWhiteSpace(userInput))
        {
            // 用字符分割并自动过滤空字符串
            string[] numberStrings = userInput.Split('#', StringSplitOptions.RemoveEmptyEntries);
            
            List<int> numbers = new List<int>();
            foreach (string numStr in numberStrings)
            {
                // 安全解析整数,跳过无效内容
                if (int.TryParse(numStr, out int num))
                {
                    numbers.Add(num);
                }
                else
                {
                    Console.WriteLine($"警告:'{numStr}' 不是有效整数,已跳过");
                }
            }

            // 统计重复的不同值数量(如输入1#2#3##2,结果为1,因为只有2重复)
            var repeatedValues = numbers.GroupBy(n => n)
                                        .Where(group => group.Count() > 1);
            int totalDuplicateNumbers = repeatedValues.Count();

            // 若需要统计重复出现的总次数(如2出现2次,算1次重复;出现3次算2次),可替换为:
            // int totalDuplicateCount = repeatedValues.Sum(g => g.Count() - 1);

            Console.WriteLine($"The sequence contains {totalDuplicateNumbers} repeated values.");
        }
        else
        {
            Console.WriteLine("Wrong input");
        }

        Console.WriteLine("===========================");
    }
}

关键修改说明

  1. Split优化:Split('#', StringSplitOptions.RemoveEmptyEntries)既解决了重载错误,又自动剔除分割产生的空字符串,避免后续解析异常。
  2. 安全解析:用int.TryParse替代Int32.Parse,有效避免无效输入导致的程序崩溃,同时给用户明确的警告提示。
  3. 准确统计重复值:借助LINQ的GroupBy对数字分组,直接筛选出现次数大于1的分组,无论重复值是否连续都能正确统计不同重复值的数量,逻辑更简洁可靠。

内容的提问来源于stack exchange,提问作者jose mathew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:14:54