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

VB.Net如何修改ToModern函数使字符统计结果按输入出现顺序输出

问题原因

你现有代码是固定先统计整个字符串中A的总数量、再统计B的总数量、最后统计C的总数量,拼接顺序永远固定为A计数+A + B计数+B + C计数+C,和字符在输入里的出现顺序完全无关,所以才会得到不符合预期的输出。

实现方案(游程编码,匹配你给出的测试用例逻辑)

你需要的是按连续相同字符的出现顺序统计数量,对应代码如下:

Public Function ToModern(_cond$)
    If String.IsNullOrEmpty(_cond) Then Return ""
    Dim result As New Text.StringBuilder()
    ' 初始化当前字符为第一个字符,计数为1
    Dim currentChar As Char = _cond(0)
    Dim count As Integer = 1
    
    For i = 1 To _cond.Length - 1
        If _cond(i) = currentChar Then
            ' 和当前字符相同,计数+1
            count += 1
        Else
            ' 字符变化,拼接上一组的结果,重置当前字符和计数
            result.Append($"{count}{currentChar}")
            currentChar = _cond(i)
            count = 1
        End If
    Next
    ' 拼接最后一组的结果
    result.Append($"{count}{currentChar}")
    Return result.ToString()
End Function

测试验证

Public Function Test()
    Trace.WriteLine(ToModern("AAABBBCCC")) ' 输出 3A3B3C,符合预期
    Trace.WriteLine(ToModern("CCCCBBBAAA")) ' 输出 4C3B3A,为你需要的顺序(你提到的3C为笔误,输入的C实际为4个)
    Trace.WriteLine(ToModern("BBAACCCC")) ' 输出 2B2A4C,和输入字符顺序匹配
End Function

若你需要的是按字符首次出现顺序统计全量总数(非连续分组)

比如输入ABAC时输出3A1B1C,可以用以下实现:

Public Function ToModern(_cond$)
    If String.IsNullOrEmpty(_cond) Then Return ""
    Dim charCount As New Dictionary(Of Char, Integer)
    Dim charOrder As New List(Of Char)
    For Each c In _cond
        If charCount.ContainsKey(c) Then
            charCount(c) += 1
        Else
            charCount.Add(c, 1)
            charOrder.Add(c)
        End If
    Next
    Return String.Join("", charOrder.Select(Function(c) $"{charCount(c)}{c}"))
End Function

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:45:04