2016-05-01 13 views
0

したがって、テキストファイルをC++の2次元配列に読み込もうとしています。 問題は、各行の単語の数が常に同じではなく、行に最大11語を含めることができるということです。C++で各行の単語数が異なるテキストファイルを2次元配列に読み込みます

ZeroZero ZeroOne ZeroTwo ZeroThree 
    OneZero  OneOne 
    TwoZero  TwoOne  TwoTwo 
    ThreeZero 
    FourZero FourOne 

をしたがって、アレイは[2] [1] "TwoOne" を含める必要があり、配列[1] [1]など、 "OneOne" を含むべきである:例えば、入力ファイルが含まれている可能性が

私のプログラムが行ごとに行番号を増やす方法を知りません。私は明らかに持っては機能していません。

string myArray[50][11]; //The max, # of lines is 50 
ifstream file(FileName); 
if (file.fail()) 
{ 
    cout << "The file could not be opened\n"; 
    exit(1); 
} 
else if (file.is_open()) 
{ 
    for (int i = 0; i < 50; ++i) 
    { 
     for (int j = 0; j < 11; ++j) 
     { 
      file >> myArray[i][j]; 
     } 
    } 
} 
+0

'getline()'で行を読んで片方向にする必要があります。 – MikeCAT

+0

なぜ「ベクトル<ベクトル>」を使用していませんか? –

+0

@barakmanos私はそれが 'ベクトル<ベクトル>' – MikeCAT

答えて

1

あなたがデータを読み取ることがあるでしょうどのくらい事前に知っていないと、データを保存するためにvector<vector<string>>を使用する必要があります。

#include <iostream> 
#include <sstream> 
#include <fstream> 
#include <vector> 
using namespace std; 

int main() 
{ 
    const string FileName = "a.txt"; 
    ifstream fin (FileName); 
    if (fin.fail()) 
    { 
     cout << "The file could not be opened\n"; 
     exit (1); 
    } 
    else if (fin.is_open()) 
    { 
     vector<vector<string>> myArray; 
     string line; 
     while (getline (fin, line)) 
     { 
      myArray.push_back (vector<string>()); 
      stringstream ss (line); 
      string word; 
      while (ss >> word) 
      { 
       myArray.back().push_back (word); 
      } 
     } 

     for (size_t i = 0; i < myArray.size(); i++) 
     { 
      for (size_t j = 0; j < myArray[i].size(); j++) 
      { 
       cout << myArray[i][j] << " "; 
      } 
      cout << endl; 
     } 
    } 

} 
+1

ありがとう!私はベクトルについて知らなかったので、私は配列を使用しようとしていました。私はベクトルについていくつかの研究をしなければならないと思う。あなたの答えはとても役に立ちました。再度、感謝します! – Jack

+0

@Jackそれは助けになってうれしいです! –

関連する問題