如何从txt文件中提取打印单个单词且不遗漏原文件的换行内容?
问题原因
- 现有代码使用
>>运算符读取文件内容,该运算符默认会忽略所有空白字符(包括空格、换行符、制表符等),因此原文件的换行信息会全部丢失 - 原代码中
returnMe.resize(200)的逻辑会在字符串开头填充200个空字符,导致输出开头存在多余空白,需要删除
修改后代码
#include <iostream> #include <string> #include <fstream> #include <sstream> using namespace std; string readFileToString(string fileName) { ifstream file(fileName); string line; string returnMe; // 逐行读取保留换行边界 while (getline(file, line)) { istringstream line_stream(line); string word; bool is_first_word = true; // 拆分当前行的单个单词 while (line_stream >> word) { if (!is_first_word) { returnMe += " "; } returnMe += word; is_first_word = false; } // 每行处理完追加换行,保留原文件换行结构 returnMe += "\n"; } file.close(); // 可选:如果不需要在文件末尾额外加换行,可加下面这行代码删除末尾多余换行 // if (!returnMe.empty()) returnMe.pop_back(); return returnMe; } int main() { string fileName = "example.txt"; cout << readFileToString(fileName); return 0; }
逻辑说明
- 采用「逐行读取+行内拆单词」的实现逻辑,每读完一行主动追加换行符,完全保留原文件的换行结构
- 行内通过
istringstream拆分单词,仅在单词之间补空格,避免行尾出现多余空格 - 改用
ifstream做只读文件读取,C++11及以上标准支持直接传入string类型的文件名,不需要手动调用c_str()转换 - 已删除错误的
resize(200)逻辑,避免输出开头出现多余空字符
内容的提问来源于stack exchange,提问作者Shon
相关产品推荐
相关产品推荐

