实现比特序列按指定编码转对应字母的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
相关产品推荐
相关产品推荐

