-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] = "".

これを文字列の2次元配列に変換するにはどうすればよいですか?

Linux C ++のまったくの初心者です。

4

1 に答える 1

0

タブで区切られたファイルを読む最も簡単な方法は、入力演算子cellから派生した自明なクラスを定義することです。単純にストリームを使用し、呼び出しを として扱い、「行末記号」として使用します。これにより、各行は、 aに追加された a に挿入された s のシーケンスと見なすことができます。以下は、コードと結果の簡単な出力です。出力には 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 に答える