0

誰かが助けてくれれば幸いです!テキスト(ファイルから読み取った暗号化されたもの)の各文字を、辞書にある別の文字に置き換える必要があります。

 StreamReader st = new StreamReader(@"C:\path of text");
 string text = st.ReadToEnd();
 st.Close();
 char[] textChar = text.ToCharArray();  //splitting text into characters

したがって、キーの辞書Dictionary<char, char> keys = new Dictionary<char,char>();には、「n」と言う文字があり、値には「a」と言う別の文字があります。したがって、テキスト内の各「n」を「a」に置き換える必要があります。ディクショナリには、キーが 26 文字、値が 26 文字あります。

今、文字を置き換えて、「復号化された」テキストをいくつかのファイルに書き込もうとしています

StreamWriter sw = new StreamWriter(@"path for decrypted file");

 foreach(KeyValuePair<char, char> c in keys)
 {
    for(int i =0; i< textChar.Length; i++)
    {
         if (textChar.Contains(c.Key))
         {  //if text has char as a Key in Dictionary
             textChar[i] = keys[c.Key]; //replace with its value
         }
         else 
         {
             sw.Write(textChar[i]);  //if not, just write (in case of punctuatuons in text which i dont want to replace)
         }
     }
  }
  st.Close();
  file.Close();

置換が間違っているため、このコードは正しく機能しません。どんな助けにも感謝します!

4

3 に答える 3

1

これに似たコードを試してみてください。Visual Studio なしで書いたので、修正が必要かもしれません :)

string text = File.ReadAllText(@"path for decrypted file");

foreach(var key in keys)
{
  text = text.Replace(key.Key, key.Value);
}
于 2013-01-26T13:28:02.283 に答える
0

これを試して:

StreamReader st = new StreamReader(@"C:\path of text");
string text = st.ReadToEnd();
st.Close();

foreach(KeyValuePair<char, char> c in keys)
{
    text = text.Replace(c.Key, c.Value);
}

String.Replaceは、このインスタンス内の指定された Unicode 文字のすべての出現箇所が別の指定された Unicode 文字に置き換えられた新しい文字列を返します。

なぜ使用するのchar[] textCharですか?ほとんどの場合、 を使用することをお勧めしstringます。

于 2013-01-26T13:26:51.067 に答える
0

コードに問題があります...

(たとえば)キー(a、z)とキー(z、b)がある場合はどうなりますか。単純なスワップを適用すると、すべての a が z に変わり、次にすべての z が b になります。(これは、すべての a と z が b に変わったことを意味します)。

アイテムを何らかの中間値に変換する必要があり、必要に応じてデコードできます。

(a,z)
(z,b)

エンコード

(a,[26])
(z,[02])

デコード

([26],z)
([02],b)
于 2013-01-26T13:32:59.533 に答える