2017-04-24 4 views
0

まずは私はC++の専門家ではなく、まだ学んでいますので、どんな洞察力があれば幸いです。この問題は最初は単純な問題に見えましたが、数ヶ月後にはまだ解決策を見つけることができません。私はそれが私が単に見落としているという簡単な答えを期待しています。C++ファイルからテキストを読み込んで文字列をint配列に解析する

以下は、このスレッドと他のサイトで同様のスレッドを読むために書いたコードです。基本的には、GF256の乗算配列(256行ごとに256の長さ)を含むテキストファイルから読み込もうとしています。行ごとに読むことは、行(cout < <複数_ < < endl;)によって証明されているようです。ここでは、各行の文字列として必要なものを正確に見ています。この時点で私は問題です。この文字列をint配列に解析する方法が見つからないようです。私はこれをやろうとする試みが異なるこのコードを何度も繰り返しましたが、私のために働いた人はいませんでした。私はこれには非常に単純な解決策があると仮定します。繰り返しますが、この問題についての洞察は非常に高く評価されます。

int kGF = 0; 
int multiGFtemp[256 * 256]; 

int n; 

int main() 
{ 
    string multi_; 

    ifstream fileGF("GF256MultiTable.txt"); 

    if(fileGF.is_open()) 
    { 
     while(getline(fileGF,multi_)) 
     { 


      cout << multi_ << endl; 
      cin.get(); 
     } 
     fileGF.close(); 
    } 
    else 
    { 
     cout << "File is not open" << endl; 
    } 

    cin.get(); 
    cout << multi_; 

    stringstream stream2(multi_); 

    while(stream2) 
    { 
     stream2 >> n; 

     cout << n << endl; 

     multiGFtemp[kGF] = n; 
     kGF++; 
    } 

    for(int k = 0; k < 256 * 256; k++) 
    { 
     /* 
     cout << multiGFtemp[k] << " "; 
     */ 
    } 

    cin.get(); 
    return 0; 
} 
+0

あなたが提供したコードでは、 'getline'を処理する必要があるときにテキストを読むときに処理される可能性のある行が最後にあります。行(文字列)と配列を引数とし、後者を最初の文字列の内容で埋める関数を書くことを検討してください。文字列から数値を読み込む問題は、「CSV C++」でグーグルで答えることができますそれをした。 – riodoro1

+0

ファイルのフォーマット方法の例を表示できますか? – NathanOliver

+0

.txtファイルは次のように書式設定されています。新しい行です。 0 0 0 0 ...; 1 1 1 1 1 ...; 1 2 3 5 ...;各番号の間には未定義の量の空白がありますが、番号が付けられた各256行の最後に明確な改行があります。 – pfe

答えて

0

あなたのプログラムは、その時点でファイルの最後の行である、multi_の内容を解析します。
これをループに移すことはできますが、それは事態を複雑にするだけです。単純な配列に256 * 256の数字を入れたいだけなら、ファイル構造を無視することができます。

これは、配列にそのファイルをズルズルの一つの方法である:

int multiGFtemp[256 * 256]; 

int main() 
{ 
    ifstream fileGF("GF256MultiTable.txt"); 
    int kGF = 0; 
    while (kGF < 256 * 256 && fileGF >> multiGFtemp[kGF]) 
    { 
     kGF++; 
    } 

    for(int k = 0; k < kGF; k++) 
    { 
     cout << multiGFtemp[k] << " "; 
    } 
} 
+0

これはまさに私が探していたものです。完璧にシンプル。私はループに解析を移そうとしましたが、その方法でも動作させることができましたが、ここで提供するソリューションははるかに簡単です。ありがとうございました! – pfe

0

私はあなたが引数に知られている形式の文字列を読み込むしようとしていると仮定します。 たとえば、 "X = 1035、Y = 6658"の行を含むファイルがあります。 これが当てはまる場合、私はsscanfを使用することを好みます。例えば

string format("X = %d, Y = %d"); 
string str("X = 1035, Y = 6658"); 
int x, y; 
sscanf(str.c_str(), format, &x, &y); 
+0

あなたは、配列への行の解析に関する主な質問に対する答えがありません。 – Dusteh

0

Boostライブラリは、ここであなたを助けるかもしれません。 例えば、Boost String Algo Splitを見てください。

関連する問題