You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++如何逐行读取文件并将姓名和分数分别存入不同数组

C++ 逐行读取csv文本拆分姓名与分数的实现方法

现有代码问题

你当前的代码仅调用了1次getline,且分隔符设置为逗号,只会读取第一行第一个逗号前的内容,自然只能输出第一个姓名。

实现思路

  1. 优先使用std::vector作为存储容器,比固定长度的原生数组更灵活,不需要提前预估数据量
  2. 外层循环逐行读取整个文本的所有行
  3. 对每一行单独做逗号分隔的字段拆分,取第一个字段为姓名,第四个字段为分数,分别存入对应容器

完整实现代码

#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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:09:01