-1

我有这样的字符串:

     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++ 的新手。

4

1 回答 1

0

读取制表符分隔文件的最简单方法似乎是定义一个从输入运算符cell派生的普通类,只需使用流,调用被视为 a ,并用作“行终止符”。这样,每一行都可以看作是插入到 a 中的 s序列,而 a本身只是添加到 a中。下面是代码以及结果的简单输出。输出需要 C++11,其他所有内容也应使用 C++03 编译。std::stringstd::getline()std::string'\t'cellstd::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";
    }
}
于 2013-09-16T02:13:18.330 回答