C++自定义字母二进制编码互转功能的代码错误求助
解决字母与自定义二进制编码互转问题
Alright, let's tackle this custom binary encoding/decoding problem step by step. First, let's recap the rules clearly to make sure we're on the same page:
a→1(0 zeros + 1)b→01(1 zero + 1)c→001(2 zeros + 1)d→0001(3 zeros + 1)e→00001(4 zeros + 1)f→000001(5 zeros + 1)
一、编码(Encode)功能实现与错误排查
常见编码错误点
- 错误计算0的数量:很多人会误以为
a对应1个0,或者把字母的索引(a-'a'=0)加1来计算0的数量,导致编码完全错乱。正确的逻辑是:对于字母c,0的数量等于c - 'a'(a对应0个0,b对应1个,以此类推)。 - 未处理非法输入:如果输入包含非
a-f的字符(比如大写字母、数字),程序会生成无效编码,需要添加输入校验。 - 字符串拼接逻辑错误:比如循环添加0时次数错误,或者忘记添加结尾的
1。
正确的Encode函数实现
#include <string> #include <stdexcept> // 用于抛出异常处理非法输入 using namespace std; string encode(const string& input) { string encodedStr; for (char ch : input) { // 校验输入是否为a-f的小写字母 if (ch < 'a' || ch > 'f') { throw invalid_argument("Input must only contain lowercase letters a-f."); } int zeroCount = ch - 'a'; // 计算需要添加的0的数量 encodedStr.append(zeroCount, '0'); // 添加对应数量的0 encodedStr += '1'; // 每个编码以1结尾 } return encodedStr; }
二、解码(Decode)功能实现与错误排查
解码的核心是以1作为编码单元的分隔符,因为每个字母的编码都以1结尾。统计1前面连续的0的数量,就能对应到对应的字母(0个0→a,1个0→b,…,5个0→f)。
常见解码错误点
- 尝试固定长度分割:这个编码是可变长度的(1-6位),不能按固定位数分割,必须以
1来识别每个编码单元的结束。 - 未重置计数器:处理完一个
1后,没有把0的计数器归零,导致下一个编码的0数量累加错误。 - 未处理不完整编码:如果二进制字符串最后一段没有以
1结尾(比如"10100"),这是无效编码,需要标记错误。 - 忽略非法二进制字符:如果输入包含
0和1之外的字符,需要处理这类错误。
正确的Decode函数实现
string decode(const string& input) { string decodedStr; int zeroCounter = 0; for (char bit : input) { if (bit == '0') { zeroCounter++; } else if (bit == '1') { // 0的数量对应字母:zeroCounter个0 → 'a' + zeroCounter if (zeroCounter >= 0 && zeroCounter <= 5) { decodedStr += ('a' + zeroCounter); } else { // 超出a-f范围的无效编码,用?标记 decodedStr += '?'; } zeroCounter = 0; // 重置计数器,准备处理下一个编码单元 } else { // 非法字符,用?标记并重置计数器 decodedStr += '?'; zeroCounter = 0; } } // 检查是否有未完成的编码(最后一段只有0没有1) if (zeroCounter > 0) { decodedStr += '?'; } return decodedStr; }
三、测试用例验证
- 编码测试:输入
"abcdef"→ 输出"101001000100001000001" - 解码测试:输入
"101001000100001000001"→ 输出"abcdef" - 错误输入解码:输入
"1010"→ 输出"ab?"(最后两个0没有以1结尾,标记为错误) - 非法字符编码:输入
"g"→ 抛出invalid_argument异常
内容的提问来源于stack exchange,提问作者Aiden
相关产品推荐
相关产品推荐

