我有这样的字符串:
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 ++中的新手。
答案 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}}