如何在C++中按文件原有格式读取并输出数字
解决方案
要同时实现读取整数进行处理并保留原文件格式输出,你可以结合按行读取和字符串流解析的方式,具体步骤如下:
- 按行读取文件内容,保留每行的结构;
- 对每行使用字符串流提取整数,转为
int类型以便处理; - 存储每行的整数列表,处理完成后按原行结构输出。
示例代码
#include <fstream> #include <string> #include <sstream> #include <vector> #include <iostream> void processFile(const std::string& path) { std::fstream fs(path); if (!fs.is_open()) { std::cerr << "无法打开文件" << std::endl; return; } // 存储每行的整数列表 std::vector<std::vector<int>> lineNumbers; std::string line; // 读取每行并解析整数 while (std::getline(fs, line)) { std::vector<int> nums; std::istringstream iss(line); int num; while (iss >> num) { // 这里可以对整数进行处理,比如排序、计算等 nums.push_back(num); } lineNumbers.push_back(nums); } // 按原格式输出 for (const auto& nums : lineNumbers) { for (size_t i = 0; i < nums.size(); ++i) { if (i != 0) { std::cout << " "; // 数字间用空格分隔 } std::cout << nums[i]; } std::cout << std::endl; // 每行结束换行 } } // 调用示例 int main() { processFile("your_file_path.txt"); return 0; }
代码说明
- 按行读取:使用
std::getline读取每行,确保保留原有的换行结构; - 字符串流解析:用
std::istringstream将每行字符串拆分为整数,既可以获取int类型的值进行处理,又能保留每行的数字数量; - 格式还原:输出时按每行的整数列表依次打印,数字间用空格分隔,每行结束后换行,与原文件格式一致。
注意事项
如果原文件中数字间存在多个空格或制表符,上述代码会将其替换为单个空格。若需要完全保留原始分隔符的格式,需要额外记录每行的分隔符位置,这会增加代码复杂度,一般场景下上述方案已足够满足需求。
内容的提问来源于stack exchange,提问作者brah79
相关产品推荐
相关产品推荐

