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

实现比特序列按指定编码转对应字母的C++代码运行异常求解

问题排查与修复方案

你的代码存在两个核心问题:

  • 字符类型匹配错误:string 存储的比特序列每个元素是字符型,你直接和整数1、0做相等判断,字符'1'的ASCII值为49,'0'为48,永远不可能等于整数1/0,因此所有条件分支都无法触发,没有正确输出。需要把判断条件中的整数1/0替换为字符字面量'1'/'0'。
  • 潜在越界风险:没有判断剩余字符长度是否满足取2位/3位的要求,当输入比特序列不符合编码规则时,可能出现访问string下标越界的问题,另外代码中定义的A/B/C/D/E变量未使用,属于冗余代码可以删除。

修复后的完整代码

#include<iostream>
#include<string>
using namespace std;

int main()
{
    string code;
    cout << "Enter a sequence of bits: ";
    cin >> code;
    int i = 0;
    int len = code.length();
    while (i < len)
    {
        // 剩余长度足够判断两位编码
        if(i + 1 < len) {
            if( code[i]== '1' && code[i + 1]== '1' )
            {
                cout << 'A';
                i += 2;
                continue;
            }
            else if ( code[i]== '1' && code[i + 1]== '0')
            {
                cout << 'B';
                i += 2;
                continue;
            }
            else if ( code[i]== '0' && code[i + 1]== '1')
            {
                cout << 'C';
                i += 2;
                continue;
            }
        }
        // 剩余长度足够判断三位编码
        if(i + 2 < len) {
            if ( code[i]== '0' && code[i + 1]== '0' && code[ i + 2]== '1')
            {
                cout << 'D';
                i += 3;
            }
            else if ( code[i]== '0' && code[i + 1]== '0' && code[ i + 2]== '0')
            {
                cout << 'E';
                i += 3;
            }
        } else {
            cerr << "非法比特序列" << endl;
            break;
        }
    }
    cout << endl;
    return 0;
}

用示例输入01100001100110测试,即可得到正确输出CBEADB。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:36:04