2015-12-15 2 views
1

Я пытаюсь сделать C# Caesar Cipher для задания. Я пытался это сделать довольно долго и не добиваюсь никакого прогресса.C# Caesar Cipher не может расшифровать

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что вместо использования моего encrypted_text и его расшифровки это просто cycles through that alphabet, ignoring the character that it started on.. Предполагается, что предполагается, что он должен использовать encrypted_text и циклически перемещаться по алфавиту, меняя каждую букву на определенное число.

Это то, что я до сих пор:

using System; 
using System.IO; 
class cipher 
{ 
    public static void Main(string[] args) 
    { 

     string encrypted_text = "exxego"; 
     string decoded_text = ""; 
     char character; 
     int shift = 0; 
     bool userright = false; 

     char[] alphabet = new char[26] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; 

     do 
     { 

      Console.WriteLine("How many times would you like to shift? (Between 0 and 26)"); 
      shift = Convert.ToInt32(Console.ReadLine()); 
      if (shift > 26) 
      { 
       Console.WriteLine("Over the limit"); 
       userright = false; 
      } 
      if (shift < 0) 
      { 
       Console.WriteLine("Under the limit"); 
       userright = false; 
      } 
      if (shift <= 26 && shift >= 0) 
      { 
       userright = true; 
      } 
     } while (userright == false); 

     for (int i = 0; i < alphabet.Length; i++) 
     { 
      decoded_text = ""; 
      foreach (char c in encrypted_text) 
      { 
       character = c; 

       if (character == '\'' || character == ' ') 
        continue; 

       shift = Array.IndexOf(alphabet, character) - i; 
       if (shift <= 0) 
        shift = shift + 26; 

       if (shift >= 26) 
        shift = shift - 26; 


       decoded_text += alphabet[shift]; 
      } 
      Console.WriteLine("\nShift #{0} \n{1}", i + 1, decoded_text); 
     } 

     StreamWriter file = new StreamWriter("decryptedtext.txt"); 
     file.WriteLine(decoded_text); 
     file.Close(); 

    } 
} 

Как вы можете видеть из моей картины, я получаю близко. Я просто должен уметь это взломать. Любая помощь будет принята с благодарностью. Пожалуйста, простите меня, если это простой вопрос/решение, я действительно новичок в этом.

+0

Приносим извинения, но я не могу сплести каламбур: вы не можете decaesarcipher ... – Codor

+0

Просто любопытно, что и где этот класс, это не первый экземпляр этого сегодня. Вот [другой вопрос] (http://stackoverflow.com/q/34294390/451475). – zaph

+0

Это Линкольнский университет. Этот человек делает ту же оценку, что и я ... маленький мир! – Amateur24Hour

ответ

2

Ваш алфавит содержит символы верхнего регистра, но ваш ввод полностью в нижнем регистре. Вам необходимо справиться с этой ситуацией либо путем ввода всех входных данных в один и тот же регистр, либо для обработки букв верхнего и нижнего регистра.

+0

Спасибо! Я глупо застрял на этом дольше, чем я признаю. Я приму ваш ответ через 3 минуты, когда смогу. Еще раз спасибо! – Amateur24Hour

+0

Я бы также посоветовал вам не делать таких условий: if (shift <= 0) shift = shift + 26; потому что это приведет к ошибкам, которые трудно поймать, лучше бросить или отобразить некоторые сообщения, чтобы вы не тратили слишком много времени на поиск проблемы. –

+0

Еще один отличный совет, спасибо. Вы очень помогли! – Amateur24Hour