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