C++ STL getline读入回车符\r,打印乱码问题
在做 C++ Primer 5th (中文版)练习11.33 单词转换程序 时,程序跑出来的结果和实际结果有偏差。仔细检查发现程序并没有什么逻辑和语法上的错误。
首先交待一下环境:
-
系统:Ubuntu 20.04(安装在Windows 11上)
-
编译器:gcc 9.4.0
-
调试器:gdb 9.2
问题
参考C++ Primer 5th 练习11.33的代码。
我用Windows 11的记事本创建了两个txt
文件,一个是规则文件word_transformation_bad.txt
,一个是要转换的文本文件given_to_transform.txt
。j记事本创建的文本文件的默认行尾序列为CRLF
。(圈起来,后面输入出错就是因为这个!!!)
希望得到的输出:
where are you
why dont you send me a picture
okay? thanks! later
编译后实际输出:
youe are
send me a picture
laters!
可以看到输出内容完全不对(每一行前还有一个空格)。
使用gdb进行调试,将断点打在46
行,运行时发现每一个value
变量后都有一个\r
。
map<string, string> buildMap(ifstream &map_file) {
map<string, string> trans_map; // 保存转换规则
for (string key, value; // key:要替换的单词,value:替换后的内容
map_file >>