You need to enable JavaScript to run this app. C#开发按单词元音数升序排序方法及单元测试报错修复
优惠活动
大模型
产品
解决方案
定价
更多

C#开发按单词元音数升序排序方法及单元测试报错修复

问题根因

两处代码不匹配直接触发Letters重载不匹配的编译报错,且现有逻辑未实现核心排序需求:

  • 原Letters方法为无参定义,返回值类型为string,但测试代码调用时传入了参数,还将返回值赋值给int类型变量,既无匹配的方法重载,也存在类型不兼容问题,这就是编译报错的直接触发点(报错提示里提到传入参数为1,本质也是传入值与现有无参方法不匹配,找不到对应重载)
  • 原Vowels类内的代码为完全无效的逻辑:初始化仅含单个元素的字符串数组做无意义排序,未实现拆分、统计元音、排序的核心流程
修正后的业务类实现

调整方法签名匹配调用规则,补充完整的元音统计、排序逻辑:

  • 方法定义调整为接收string类型输入参数,返回排序后的string结果
  • 内置兼容大小写的元音集合(aeiouy)
  • 拆分输入文本的独立句段,保留原句段的标点
  • 统计每个句段的元音字符总数,按数量升序排序后拼接为最终结果
using System.Text.RegularExpressions;
using System.Collections.Generic;
using System.Linq;

public class Vowels
{
    private readonly HashSet<char> _vowels = new("aeiouyAEIOUY");

    public string Letters(string input)
    {
        if (string.IsNullOrWhiteSpace(input))
            return string.Empty;
        
        // 按句末标点拆分,保留标点归属对应句段
        var segments = Regex.Split(input, @"(?<=[!?\.])\s+")
            .Where(seg => !string.IsNullOrWhiteSpace(seg));
        
        // 按元音数量升序排序
        var sortedSegments = segments.OrderBy(seg => 
            seg.Count(ch => _vowels.Contains(ch))
        );
        
        return string.Join(" ", sortedSegments);
    }
}
修正后的单元测试代码

修正类型不匹配问题,调整预期结果与实际逻辑对齐:

using Microsoft.VisualStudio.TestTools.UnitTesting;

[TestClass]
public class VowelsTests
{
    [TestMethod]
    public void MethodSort_vowels_in_ascending_order()
    {
        string input = "Teest! Test!";
        // 逻辑校验:Test!含1个元音(e),Teest!含2个元音(ee),升序排列后Test!在前
        string expected = "Test! Teest!";
        
        Vowels vowelsProcessor = new Vowels();
        // 修正返回值接收类型为string,与方法返回值匹配
        string actual = vowelsProcessor.Letters(input);

        Assert.AreEqual(expected, actual);
    }
}

补充提示:原测试代码中的预期值漏掉了Teest对应的感叹号,会导致断言不通过,修正后需和实际输出的标点完全对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 22:27:03