You need to enable JavaScript to run this app. C++如何将CSV格式std::string内容解析为自定义结构体的std::vector
优惠活动
大模型
产品
解决方案
定价
更多

C++如何将CSV格式std::string内容解析为自定义结构体的std::vector

问题描述

将CSV内容转为vector的实现方案有很多,不过我的需求和常规csv -> vector的场景略有不同:我通过CURL函数获取的CSV数据直接存储在std::string中,格式如下:

col1,col2,col3
abc,2,ghi
jkl,2,pqr

所有行以\n分隔。我想将这部分数据解析为std::vector<data>类型的结果,其中data结构体定义如下:

struct data
{
  std::string col1, col3;
  int col2;
};

解决方案

核心思路

  • 借助std::istringstream处理CSV字符串,逐行读取内容,直接跳过表头行与空行
  • 对每个有效数据行按,分割为三个字段,依次对应结构体的三个成员
  • 将第二个字段转为int类型后,组装为data实例存入结果vector即可

完整实现代码

以下代码仅依赖C++标准库,无需引入第三方依赖:

#include <iostream>
#include <string>
#include <vector>
#include <sstream>

struct data
{
  std::string col1, col3;
  int col2;
};

std::vector<data> parse_csv(const std::string& csv_str) {
    std::vector<data> res;
    std::istringstream csv_ss(csv_str);
    std::string line;

    // 跳过第一行表头
    std::getline(csv_ss, line);

    // 逐行读取数据
    while (std::getline(csv_ss, line)) {
        // 跳过空行(处理CSV末尾多余换行的场景)
        if (line.empty()) continue;

        std::istringstream line_ss(line);
        std::string col1, col2_str, col3;

        // 按逗号拆分三个字段
        std::getline(line_ss, col1, ',');
        std::getline(line_ss, col2_str, ',');
        std::getline(line_ss, col3, ',');

        // 组装结构体存入结果
        data item;
        item.col1 = col1;
        item.col2 = std::stoi(col2_str);
        item.col3 = col3;
        res.push_back(item);
    }
    return res;
}

// 测试示例
int main() {
    std::string csv_data = R"(col1,col2,col3
abc,2,ghi
jkl,2,pqr
)";
    auto result = parse_csv(csv_data);
    // 打印验证结果
    for (const auto& item : result) {
        std::cout << "col1: " << item.col1 << ", col2: " << item.col2 << ", col3: " << item.col3 << std::endl;
    }
    return 0;
}

注意事项

  • 上述实现仅适用于无转义字符、字段内不含逗号/换行的简单CSV场景,如果你的实际数据包含复杂转义规则,建议使用成熟的第三方CSV解析库降低出错概率
  • 生产环境使用时可以按需添加字段合法性校验逻辑,比如字段数量不足、col2无法转为int的异常捕获处理

内容的提问来源于stack exchange,提问作者asjhdbashjdbasjhdbhjb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 16:33:01