C++如何从多行文件读取不同长度行存入普通数组而非vector
问题解答
可行性说明
- 完全可以用普通数组实现该需求,前提是你提前声明的数组长度大于等于所有行的最大长度,避免越界。
- 原有代码的问题是直接通过
ifstream读取数字会自动忽略换行、空格等空白符,没法区分行边界,所以需要先逐行读取内容,再单独解析每行的数字。
实现步骤
- 先声明足够大的普通数组,比如你确认最长行不超过100个数字,就定义
int arr[100]; - 每次循环读取一整行文本,转为
istringstream对象 - 拿到当前行对应的长度,从
istringstream中读取对应数量的数字存入数组 - 处理当前行数组,之后进入下一轮循环即可
完整示例代码
#include <iostream> #include <fstream> #include <string> #include <sstream> using namespace std; // 假设你已经确认最长行的数字数量不超过100,定义数组最大长度 #define MAX_ARR_LEN 100 int main() { int arr[MAX_ARR_LEN]; string inFileName = "file.txt"; ifstream inFile(inFileName.c_str()); string line; // 示例对应你给出的4行的长度,实际替换成你从其他文件获取的真实值 int line_size[] = {13,9,23,5}; int line_cnt = 0; if (inFile.is_open()) { // 逐行读取文件 while (getline(inFile, line)) { // 跳过空行(如果有的话) if (line.empty()) continue; // 将当前行转为字符串流 istringstream line_stream(line); // 获取当前行的长度 int cur_size = line_size[line_cnt]; // 读取对应数量的数字存入数组 for (int i = 0; i < cur_size; i++) { line_stream >> arr[i]; // 测试输出可删除 cout << arr[i] << " "; } cout << endl; // 这里放置你对当前行数组的处理逻辑 // ... line_cnt++; } inFile.close(); } else { cout << "无法打开文件" << endl; } return 0; }
注意事项
- 必须保证
MAX_ARR_LEN的取值大于所有行的最大长度,否则会出现数组越界,导致程序崩溃或者不可预期的错误。 - 如果后续行长度的最大值有变动,需要同步修改
MAX_ARR_LEN的定义。
内容的提问来源于stack exchange,提问作者beechy
相关产品推荐
相关产品推荐

