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

Coding Game二进制编码问题:C字符编码结果不符求助

问题分析与修复

你的代码主要存在以下几个问题,导致输出不符合预期:

1. 末尾段处理逻辑完全错误

你最后判断的是toBinary.Length - 1 == '1',这是把字符串的**最后一个索引(整数)**和字符'1'做比较,完全不符合逻辑。正确的做法是取字符串的最后一个字符toBinary[toBinary.Length - 1],同时还要用之前累计的cnt值来处理这个末尾的连续字符段,而不是默认按长度1处理。

2. 连续字符计数未重置

当遇到不同字符处理完当前段后,没有将cnt重置为1,导致后续的连续字符计数错误。

3. 多余空格与拼接逻辑混乱

直接用字符串拼接时添加了大量冗余空格,导致输出出现多个连续空格。更优雅的方式是用List<string>收集每一段编码,最后用单个空格拼接。

4. 重复的逻辑判断

你分开判断cnt == 1和cnt > 1,但实际上这两种情况的处理逻辑可以合并,只需要根据当前字符是'1'还是'0'选择前缀,再拼接对应数量的'0'即可。


修正后的代码

public void Solution()
{
    string MESSAGE = "C";
    string toBinary = "";
    // 收集每一段编码,避免冗余空格
    List<string> resultSegments = new List<string>();

    // 将字符转换为二进制字符串,确保每个字符是7位标准ASCII长度
    foreach (char c in MESSAGE)
    {
        toBinary += Convert.ToString(c, 2).PadLeft(7, '0');
    }

    if (string.IsNullOrEmpty(toBinary))
    {
        Console.WriteLine("");
        return;
    }

    int cnt = 1;
    char currentChar = toBinary[0];

    for (int i = 1; i < toBinary.Length; i++)
    {
        if (toBinary[i] == currentChar)
        {
            cnt++;
        }
        else
        {
            // 处理当前连续段
            AddSegment(resultSegments, currentChar, cnt);
            // 重置计数和当前字符
            currentChar = toBinary[i];
            cnt = 1;
        }
    }

    // 处理最后一段连续字符
    AddSegment(resultSegments, currentChar, cnt);

    // 用单个空格拼接所有段
    string result = string.Join(" ", resultSegments);
    Console.WriteLine(result);
}

// 提取重复逻辑,添加编码段到列表
private void AddSegment(List<string> segments, char bit, int count)
{
    if (bit == '1')
    {
        segments.Add("0");
        segments.Add(new string('0', count));
    }
    else
    {
        segments.Add("00");
        segments.Add(new string('0', count));
    }
}

关键改进说明

  1. 二进制补位:添加PadLeft(7, '0')确保每个字符的二进制都是7位(符合ASCII编码的标准长度,避免短字符导致的错误)。
  2. 用List收集编码段:避免手动拼接时的空格混乱,最后用string.Join统一生成正确格式的字符串。
  3. 提取重复逻辑到方法:减少代码冗余,让逻辑更清晰。
  4. 正确处理末尾段:循环结束后单独处理最后一段连续字符,使用累计的cnt值。
  5. 重置计数:每次切换字符时重置cnt为1,保证计数准确。

测试单个字符C时,输出为:0 0 00 0000 0 00,符合预期;测试两个CC时,输出为:0 0 00 0000 0 000 00 0000 0 00,同样符合规则。

内容的提问来源于stack exchange,提问作者Bogdan Şandor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 04:34:55