2017-12-11 10 views
-1

現在、2次元配列を作成するために2つの関数を使用しているコードを、2D配列を作成する1つの関数に変換する必要があります。C++、1D Arrayを2D配列に変換する

配列の内容は、 'A'から 'Y'(5 * 5サイズの行列が必要なため 'Z'を省略)のアルファベットです。注:私はベクトルまたはポインタを使用することはできません。

以下のコードは機能しますが、それを1つの関数に変換する必要があります。これはかなり問題があります。私は研究していますが、十分な解を見つけることができず、C++の初心者です。

// Fills 4-Square Matrix 1 with Alphabet (1D Array) 
void fill4Square1(char* FourSquare_1_Matrix) 
{ 
    int n; 
    for (n = 0; n < 25; n++) 
     FourSquare_1_Matrix[n] = 'A' + n; 
} 
// Fills 4-Square Matrix 1 with Alphabet (2D Array) 
void fill4Square1_1() 
{ 
    char FourSquare_1_Matrix[5][5]; 
    fill4Square1((char*)FourSquare_1_Matrix); //Function Call for 1D Array 
    for (int row = 0; row < 5; row++) //For Loop puts 1D array into 2D Array 
    { 
     for (int col = 0; col < 5; col++) 
      cout << FourSquare_1_Matrix[row][col] << " "; 
     cout << "\n"; 
    } 
} 

私は以下のコードを書いていますが、1Dアレイの内容を2D配列に取り込むことはできません。 2D配列はランダムな文字で埋められています。 Program OUTPUT

void PlayFairMatrix1() 
{ 
    int i = 0; 
    char Matrix[25] = { {0} }; 
    char PlayFairMatrix[5][5] = { {0} }; 
    int n; 

    //1D Matrix 
    for (i = 0; i < 25; i++) 
    { 
     Matrix[i] = 'A' + i; 
     cout << Matrix[i]; 
    } 
    cout << "\n"; 
    cout << " " << endl; 

    ////2D Matrix 
    for (int row = 0; row < 5; row++) 
    { 
     for (int col = 0; col < 5; col++) 
     { 
      PlayFairMatrix[row][col] = Matrix[i]; 
       i++; 
     } 
     cout << PlayFairMatrix << " "; 
     cout << "\n"; 
    } 
    cout << " " << endl; 

} 

誰でも正しい方向を教えてください。

答えて

0

問題がPlayFairMatrix[row][col] = Matrix[i];

iが前のループからの値25から始まり、このライン上に位置しています。そして、0に戻すことは決してありません。

したがって、修正する最も簡単な方法は、2番目のループの前にi = 0;を追加するだけです。

もう1つの方法は行と列を使用してMatrixにアクセスしますが、私は練習としてそのままにします。

また、PlayFairMatrixを印刷するときは、インデックスを使用してアクセスしていないため、代わりにポインタを印刷します。 cout << PlayFairMatrix << " ";を内側のループに入れてインデックスを追加すると、cout << PlayFairMatrix[row][col] << " ";

+0

に追従し、出力がないとして、あなたは、単にそれを行うことができます影響を受けるようです。 – mplh2008

+0

あなたは私の答えの最後の段落を読んだことがありますか? – lamandy

+0

はい、コードは現在動作しています - ありがとうございます、本当にありがとうございます。 – mplh2008

0

が入力されていますが、変数i = 0を再初期化するのを忘れてしまいました。それはあなたのコードを修正します。

しかし

void PlayFairMatrix1() 
{ 
    char PlayFairMatrix[5][5] = { {0} }; 
    int i = 0; 
    for(int row = 0; row < 5; ++row) 
    { 
     for(int col = 0; col < 5: ++col) 
     { 
      PlayFairMatrix[row][col]='A'+i; 
     } 
    } 
} 
私は第二のループの最初と3番目のループの前に戻ってゼロ 'I = 0'にi` `リセットしようとした
+0

ありがとうございます。 'i = 0;'をリセットし、 '<< cout <<を移動した後PlayFairMatrix [row] [col] <<" "; '内部のループに入ると、コードが動作します。 – mplh2008

関連する問題