2017-10-16 5 views
0

にマトリックスのロード、私の目標は、テキストファイルから行列を読み込むと2Dベクターにそれらを格納することで、次のように私のコードは次のとおりです。は、私はC++でのベクターを使用してに新しいです2DベクトルC++

#include <fstream> 
#include <iostream> 
#include <sstream> 
#include <string> 
#include <vector> 
int main() 
{ 
    std::ifstream in("input.txt"); 
    std::vector<std::vector<int> > v; 

    if (in) { 
     std::string line; 

     while (std::getline(in, line)) { 
      v.push_back(std::vector<int>()); 

      // Break down the row into column values 
      std::stringstream split(line); 
      int value; 

      while (split >> value) 
       v.back().push_back(value); 
     } 
    } 

    for (int i = 0; i < v.size(); i++) { 
     for (int j = 0; j < v[i].size(); j++) 
      std::cout << v[i][j] << ' '; 

     std::cout << '\n'; 
    } 
} 

は今言う

10101010 
01010101 
10101011 
01011010 

の入力のために私は

10101010 
1010101 
10101011 
1011010 

の出力、すなわち毎回0の初めに遭遇され得ますそれは省略されています。私は問題がステートメント(スプリット>>値)中にあると信じていますが、それをより良い方法でコーディングする方法はわかりません。

+1

リーディング0は整数に何も意味しないので、それらは破棄されます。なぜ文字列を保存しないのですか? – NathanOliver

+0

私はそれが問題であると信じています。なぜなら、0は論理的な偽であり、無視されているからです。 –

+0

入力ファイルの文字列を文字列で取ったのは、文字単位で読み込むよりも速いからですが、後で行列演算を適用して整数として保存したいのです。 –

答えて

1

実際にビットを保存するように見えますが、何とかして、たとえば10101010を含む行を解析して一連のビットに苦労しました。 1行あたりの最大ビット数を知っている場合はbitset<N>を使用できます。これは10101010のようなものを直接読み取ることができる演算子>>の使いやすいオーバーロードを提供します。それが役に立てば幸い。

int main() 
{ 
    std::ifstream in("input.txt"); 
    std::vector<std::bitset<8> >v; 

    if (in) { 
     std::bitset<8> bits; 
     while (in >> bits) { 
      v.push_back(bits); 
     } 
    } 

    for (int i = 0; i < v.size(); i++) { 
     for (int j = 0; j < v[i].size(); j++) 
      std::cout << v[i][j] << ' '; 

     std::cout << '\n'; 
    } 
} 
+0

私よりもはるかに優れた回答 – pointerless

1

for(int x=0; x<line.size(); x++){ 
    v.back().push_back((int)line[x] - (int)'0')); 
} 

while (split >> value) 
    v.back().push_back(value); 

を交換し、完全にあなたの文字列ストリームを削除します。

+0

コードの ' - (int)' 0 ''部分を説明していただき、ありがとうございます。 –

+0

ASCII標準では数値を文字順に定義しています(0〜9)ので、文字をintにキャストして値を減算します0の場合は、文字の値を返します。 – pointerless

+0

大きな説明ではありませんが、こちら[こちら](https://stackoverflow.com/questions/5029840/convert-char-to-int-in-c-and-c) – pointerless

関連する問題