如何从包含csv数据的字符串生成字符串数组?

时间:2013-09-16 01:33:41

标签: c++ linux gcc

我有这样的字符串:

     ab   cd   ef   gh
1    4    2    9    9
9    1    0    4    1.5
1    4    2    9.0

它可能以\t(或其他分隔符)开头。 如果它以\t开头 - 则表示result[0][0] = ""

如何将其转换为二维数组字符串?

我是linux c ++中的新手。

1 个答案:

答案 0 :(得分:0)

读取制表符分隔文件似乎最简单的方法是定义一个从cell派生的普通类std::string,输入操作符只需使用std::getline()和流,即调用被视为std::string,并使用'\t'作为“行终止符”。有了它,每一行都可以看作cell s的序列,它被插入到std::vector<std::string>中,std::vector<std::vector<std::string>>本身只是添加到#include <algorithm> #include <fstream> #include <iostream> #include <iterator> #include <sstream> #include <string> #include <vector> struct cell: std::string {}; std::istream& operator>> (std::istream& in, cell& c) { return std::getline(in, c, '\t'); } int main() { std::vector<std::vector<std::string>> values; std::ifstream fin("in.csv"); for (std::string line; std::getline(fin, line); ) { std::istringstream in(line); values.push_back( std::vector<std::string>(std::istream_iterator<cell>(in), std::istream_iterator<cell>())); } for (auto const& vec: values) { for (auto val: vec) { std::cout << val << ", "; } std::cout << "\n"; } } 。下面是代码以及结果的简单输出。输出需要C ++ 11,其他一切也应该用C ++ 03编译。

{{1}}