0

文字列を 1 文字ずつ 2 次元配列に追加する方法がわかりません。

「秘密のメッセージ」を暗号化するための置換暗号を作成する一環として、私はしようとしています。

  1. キーワードを受け入れる
  2. 上記のキーワードからすべての冗長な文字を削除します
  3. この新しいキーワードを 5x5 配列に char ごとに追加します。
  4. 配列内の残りのスペースについては、アルファベット順に入力してください (一意の文字のみ。キーワードから既に入力されているものを除外することを意味します)。また、これは 5x5 の配列であるため、文字 Z を無視していることも意味します。わざわざそれをエンコードしようとはしません。

言い換えれば、私は次の効果のために何かをしようとしています:

string keyword = "PREPARATION";
string new_keyword = "PREATION";   // removed redundant letters, only unique ones remain

string alphabet =     "ABCDEFGHIJKLMNOPQRSTUVWXY";
string new_alphabet = "BCDFGHJKLMQSUVWXY";   //notice chars P, R, E, A, T, I, O, N are no longer present

この最初の部分は、問題なく理解できました。しかし、配列に new_keyword と new_alphabet を追加したいと思います。

     0   1   2   3   4
   ---------------------
  0| P | R | E | A | T |
   ---------------------
  1| I | O | N | B | C |
   ---------------------
  2| D | F | G | H | J |
   ---------------------
  3| K | L | Q | Q | S |
   ---------------------
  4| U | V | W | X | Y |
   ---------------------

最初に文字列 new_keyword が追加され、その後に文字列 new_alphabet が追加されます。したがって、この時点で、私のコードは次のようになります。

string new_keyword = "PREATION";
string new_alphabet = "BCDFGHJKLMQSUVWXY";

const int ROW = 5;
const int COL = 5;

char arr[row][col] = {0}; //initialize all values in array to 0

for(int i = 0; i < new_keyword.length(); i++)
{
    arr[0][i] = new_keyword[i];
}

これまでのところ、2dim 配列に char ごとに new_keyword が入れられます。明らかに、「PREATION」は 5 文字を超える文字列ですが、プログラムはこの明らかなオーバーラップを「認識」し、残りの文字「ION」を 2 行目に追加し続けます。

arr[1][0] == 'I';
arr[1][1] == 'O';
arr[1][2] == 'N';

なぜこれを行うことを知っているのですか?

さらに、arr[1][3] で始まる new_alphabet を追加する必要があります。「new_alphabet @ arr[1][3] で追加を開始する」などのコードを明示的にコーディングすることもできますが、これは明らかに「動的」である必要があり、 new_keyword の直後に要素への追加を開始します。どうすればこれを行うことができますか?

私はまだ 2dim 配列についてかなり曖昧だと思います。私が所有する本では、この種のケースは実際にはカバーされていません。

4

3 に答える 3