0

ランダムなテキスト ファイルを生成しました

A B C D E F G H

T W G X Z R L N

A = T 、 B = W 、 C = G などのようにメッセージをエンコードしたい..

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int
main ()
{
  string getmsg;

  ifstream openfile ("random.txt");

  if (openfile.is_open ()) {

    while (! openfile.eof ()) {
      getline (openfile,getmsg); //read from random.txt
      cout << getmsg << endl;
    }

  }
}

ここでかなり立ち往生しています。

例えば。「HAD」という単語を入力すると、「NTX」と表示され、同じランダム テキスト ファイルを使用して「NTX」と入力し、「HAD」を返すことができます。

4

3 に答える 3

2

これは宿題のように感じるので、解決策ではなくガイダンスを提供します。

入力文字と対応する出力文字の間に全単射マップを作成したいと考えています。

それを行う確実な方法の 1 つは、Mapを使用することです。'A' などの入力文字をキーとして、'T' などの出力文字を値として持つ Map を作成します。

ファイルから読み取った文字ごとに、Map を使用して対応する出力文字を検索します。

入力を一度に 1 文字ずつ読み取る (最も簡単な場合) か、一度に 1 行ずつ読み取って (現在のように)、各行を 1 文字ずつ実行して、Map で翻訳を行う必要があります。

アップデート

コメントのポイントを明確にするために、元の文字ごとにエンコードされた文字が 1 つだけあるため、これは全単射関数です。テキストをデコードする必要がない場合は、Map が関数のソフトウェア表現に対応します。デコードが必要な場合は、Bimap の方が適しています。

単射関数

単射関数

全単射関数

全単射関数

http://en.wikipedia.org/wiki/Injective_function

于 2012-07-18T04:57:25.473 に答える
0

それを行う1つの方法は、

見てくださいstd::map<>map<char,char>あなたの場合)

これを使用して、文字ペアのマップを設定できます。次に、ファイル/バッファーから1つの文字を読み取るときに、マップでそれを検索し、対応する文字を取得します。

もう1つの、より冗長な方法は、switchステートメントを使用することです。

char ch; 
ch << openfile
switch(ch)
{
   case 'A': ch = 'T'; break;
...
}
cout << ch;

他の方法もあります。配列に関連する方法がもう1つ見つかるかどうかを確認してください。

于 2012-07-18T05:09:37.783 に答える