C++如何逐行读取文件并将姓名和分数分别存入不同数组
C++ 逐行读取csv文本拆分姓名与分数的实现方法
现有代码问题
你当前的代码仅调用了1次getline,且分隔符设置为逗号,只会读取第一行第一个逗号前的内容,自然只能输出第一个姓名。
实现思路
- 优先使用
std::vector作为存储容器,比固定长度的原生数组更灵活,不需要提前预估数据量 - 外层循环逐行读取整个文本的所有行
- 对每一行单独做逗号分隔的字段拆分,取第一个字段为姓名,第四个字段为分数,分别存入对应容器
完整实现代码
#include <iostream> #include <fstream> #include <string> #include <vector> #include <sstream> using namespace std; // 将两个vector作为引用参数传入,函数内存储的结果外部可直接使用 void storeData(string studentRecords, vector<string>& names, vector<int>& scores) { ifstream recordFile(studentRecords); if (!recordFile.is_open()) { cout << "文件打开失败" << endl; return; } string line; // 循环逐行读取文件 while (getline(recordFile, line)) { stringstream ss(line); string field; string name; int score; // 读取当前行的第1个字段:姓名 getline(ss, field, ','); name = field; // 跳过第2个字段(学科) getline(ss, field, ','); // 跳过第3个字段(等级) getline(ss, field, ','); // 读取第4个字段:分数,转成int类型 getline(ss, field, ','); score = stoi(field); // 分别存入对应容器 names.push_back(name); scores.push_back(score); } recordFile.close(); } // 测试示例 int main() { vector<string> nameList; vector<int> scoreList; storeData("替换为你的实际文件路径.txt", nameList, scoreList); // 打印验证结果 for (int i = 0; i < nameList.size(); i++) { cout << "姓名:" << nameList[i] << ",分数:" << scoreList[i] << endl; } return 0; }
原生数组实现方案
如果必须使用原生数组而非vector,需要提前定义足够大的数组容量避免越界,参考如下写法:
// 假设最多存储100条学生数据 #define MAX_SIZE 100 void storeData(string studentRecords, string names[], int scores[], int& count) { count = 0; ifstream recordFile(studentRecords); if (!recordFile.is_open()) { return; } string line; while (getline(recordFile, line) && count < MAX_SIZE) { stringstream ss(line); string field; getline(ss, field, ','); names[count] = field; getline(ss, field, ','); getline(ss, field, ','); getline(ss, field, ','); scores[count] = stoi(field); count++; } recordFile.close(); }
内容的提问来源于stack exchange,提问作者Anmol Zaidi
相关产品推荐
相关产品推荐

