C++实现文本转二进制功能时如何处理空格字符的转换问题
问题原因
- 你当前使用
cin >> plaintext读取输入时,C++默认的流读取规则会在遇到空格、制表符、换行符等空白字符时直接终止读取,因此空格本身和空格后的所有内容根本没有被存入plaintext变量中,自然无法完成空格的二进制转换。
修复方案
- 把输入读取逻辑替换为
getline(cin, plaintext),该函数可以读取整行输入内容,包括其中的所有空格字符,直到遇到换行符才停止读取。 - 原有二进制转换逻辑无需修改,空格字符的ASCII码为32,使用
bitset<8>转换后会自动输出00100000,符合需求。
如果你的代码中之前有其他cin >>操作,缓冲区会残留一个换行符,会导致getline直接读入空行,这种情况可以在调用getline前加一行cin.ignore()清空缓冲区残留的换行即可。
修复后的完整代码
#include <iostream> #include <string> #include <bitset> using namespace std; int main(){ cout << "Enter plaintext: " << endl; string plaintext; // 替换为getline读取整行,保留空格 getline(cin, plaintext); for(int i=0; i < plaintext.length(); i++){ bitset<8> plain(plaintext[i]); cout << plaintext[i] << " " << plain << endl; plaintext[i] &= 0b11111111; bitset<8> 1st_enc(plaintext[i]); cout << 1st_enc << endl; } cout << "word:" << plaintext << endl; return 0; }
内容的提问来源于stack exchange,提问作者rookie
相关产品推荐
相关产品推荐

