C++逐词读取文件并原样输出:命令提示符换行显示异常问题
解决C++逐词读取文件时保留换行的问题
嘿,我来帮你搞定这个换行显示的问题!你的代码现在没法正确还原原文件的换行,核心原因出在**std::ifstream的>>运算符行为**上——它默认会跳过所有空白字符,包括空格、制表符,当然也包括换行符。也就是说,你的程序永远不会读到"\n"作为一个aString的值,那个if(aString != newLn)的判断永远不会触发else分支的换行输出,自然就没法还原原文件的换行格式了。
解决方案:按行读取+逐词处理
要保留原文件的换行,最直观的方法是先按行读取整个文件,再对每行内容逐词处理,这样就能精准还原原文件的换行结构。这里给你修改后的代码:
#include <fstream> #include <iostream> #include <string> #include <sstream> int main() { std::ifstream ins("your_file_path.txt"); // 替换成你的文件路径 std::string line; // 逐行读取文件,每次读取一行(自动跳过换行符,但我们知道这里有换行) while (std::getline(ins, line)) { std::istringstream line_stream(line); std::string aString; // 对当前行逐词读取并输出,词之间加空格 while (line_stream >> aString) { std::cout << aString << ' '; } // 处理完一行后输出换行,还原原文件的换行 std::cout << '\n'; } ins.close(); return 0; }
代码说明:
std::getline(ins, line):一次读取整行内容,直到遇到换行符为止(换行符会被丢弃,但我们知道这里存在换行,处理完一行后手动输出\n即可)。std::istringstream:把读取到的整行内容转换成一个字符串流,这样就能用熟悉的>>运算符逐词处理每行内容。- 每行处理完后输出
\n,完美还原原文件的换行位置。
额外小优化(可选)
上面的代码会在每行最后多输出一个空格,如果想避免这个小问题,可以稍微调整逐词输出的逻辑:
// 替换原来的逐词循环 bool first_word = true; while (line_stream >> aString) { if (!first_word) { std::cout << ' '; } std::cout << aString; first_word = false; } std::cout << '\n';
这样每行的词之间只会有一个空格,不会在末尾多出来~
内容的提问来源于stack exchange,提问作者Chase
相关产品推荐
相关产品推荐

