私はこのような文字列を持っています:
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] = ""
.
これを文字列の2次元配列に変換するにはどうすればよいですか?
Linux C ++のまったくの初心者です。
タブで区切られたファイルを読む最も簡単な方法は、入力演算子cell
から派生した自明なクラスを定義することです。単純にストリームを使用し、呼び出しを として扱い、「行末記号」として使用します。これにより、各行は、 aに追加された a に挿入された s のシーケンスと見なすことができます。以下は、コードと結果の簡単な出力です。出力には 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";
}
}