2016-11-12 8 views
0

私のプロジェクト:基本的には、ワークショップに小さな暗号化プログラムを書いています。これは、ユーザーの入力を受け取り、ループの文字位置が偶数であるかどうかをチェックします。ストリング、それ以外は最後。このような感じです。C#ループ内の文字列を操作する

string userInput = "", encodedInput = "", evenChar = "", oddChar = ""; 
int charCount = 0; 

Console.WriteLine("Input your text: "); 
userInput = Console.ReadLine(); 

foreach(char character in userInput) 
{ 
    charCount++; 
    if ((charCount % 2) == 0) 
    { 
     evenChar = evenChar + character; 
    } 
    else 
    { 
     oddChar = character + oddChar; 
    } 
    encodedInput = evenChar + oddChar; 
} 
Console.WriteLine(encodedInput); 

「hi my name is jeff!」と入力すると、これが正常に機能します。私は "イムエイエフ!fjsミニーh"を取得します。

私は解読ループを作成しようとしています。私が解読する方法は基本的に、文字列の最後の文字を新しい空の文字列に追加し、最初の文字を文字列から取り出し、同じ空の文字列に追加して、単純に暗号化された文字の全体の長さを減らします最初の文字の位置をインクリメントします。

char lastChar = ' '; 
char firstChar = ' '; 
StringBuilder decodedInput = new StringBuilder(); 

int len = encodedInput.Length; 
int len2 = 0; 

foreach(char character in encodedInput) 
{ 
    lastChar = encodedInput[len - 1]; 
    decodedInput.Append(lastChar.ToString()); 
    len--; 

    firstChar = encodedInput[len2]; 
    len2++; 
    decodedInput.Append(firstChar.ToString()); 
} 

Console.WriteLine(decodedInput.ToString()); 

これで大部分は問題なく動作します。それは同じ "im aei ef!fjs mny h"をとり、 "hi my name is jeff !! ffej si eman ym ih"と出力します。それは文字列を反映しているので、 "hi my name is jeff"は36文字になります。私はループを半分にしてみましたが、まだミラーリングがあります。

これを解読するためのより良い方法や簡単な方法があることはよく知っていますが、私は教育目的でこの方法でやりたいと思います。

種類:

ボーカロイド。

+0

あなたはevencharのキャパシティ(ユーザ入力/ 2)でのStringBuilder(パフォーマンス向上のため)を使用することができますし、暗号化部分の奇数char変数の容量(userInput/2 + 1)。また、encodedInput = evenChar + oddChar; foreachサイクルの後でなければなりません。 –

答えて

3

エンコードされた入力の各文字をループしないでください。各文字が2回処理されることになります。あなたがforeachを交換するので、もしあなたはすでにlenlen2変数をカウントアップし、文字列の下にされています

while (len > len2) 

これが唯一の

いったん文字列の各文字を処理しますあなたは、いくつかの操作を行う必要があります文字列が中間文字を処理するための奇数の文字である場合、つまりlenlen2が等しい場合は、特別なケーシングです。この目的のために次の行を追加します。

  if (len == len2) 
       break; 

ループの途中で、それはなるように:

 while (len > len2) 
     { 
      lastChar = encodedInput[len - 1]; 
      decodedInput.Append(lastChar.ToString()); 
      len--; 

      if (len == len2) 
       break; 

      firstChar = encodedInput[len2]; 
      len2++; 
      decodedInput.Append(firstChar.ToString()); 
     } 
+0

あなたは素晴らしいです:) – Vocaloidas