0

文字間にスペースのない 9x8 テキストファイルがあります。このテキストを開いて読み取り、文字を含む 2d ベクトルに入れるにはどうすればよいですか? 私がこれまでに持っているのはこれです...

#include <iostream>
#include <fstream>
std::ifstream in_str("inputtxt.txt");
std::string line;
while (std::getline(in_str,line))
{}
std::vector<std::vector<std::string>> replacements;

私はまだそれを設定する方法を理解しようとしていて、ファイルをベクターに追加しています

4

1 に答える 1

0

このようなものはどうですか:

std::array<std::array<char, 8>, 9> characters;

std::string line;
size_t pos = 0;
while (std::getline(in_str, line))
{
    std::copy(std::begin(line), std::end(line),
              std::begin(characters[pos++]);
}

これにより、入力ファイルから行が読み取られ、すべての文字が配列にコピーされます。

注:上記のコードにはエラー処理がなく、入力が実際に有効であるかどうかのチェックがありません。また、最も重要なことに、配列の範囲外に出ることのチェックもありません。予想よりも多くの入力行がある場合、または予想よりも 1 行あたりの文字数が多い場合、未定義の動作発生します。


別の可能な解決策として、文字列 (もちろん、配列/ベクトルなどの配列インデックス構文を使用してアクセスできます) を格納することに満足している場合は、たとえば、次のようにすることができます。

std::array<std::string, 9> characters;
std::copy(std::istream_iterator<std::string>(in_str),
          std::istream_iterator<std::string>(),
          std::begin(characters));

最初のコード サンプルと同じ免責事項がここにも適用されます。

于 2015-02-01T20:29:13.627 に答える