2016-04-11 53 views
-1

我是新來的編程和C#,我試圖讓C#中的Atbash密碼。 所以我被困在這個問題上:密碼運行良好,但是他們不在結果中放置空格或特殊字符(不需要編碼)。我試圖做到這一點,但重複了一遍。在C#中的Atbash密碼#

那麼有沒有辦法讓它跳過非字母字符並將其放在結果上?

這裏是我的代碼

using System; 

namespace AtbashCipher 
{ 
class Program 
    { 
    static void Main() 
     { 

     Console.WriteLine("Atbash cipher v1.0"); 
     Console.WriteLine(); 
     Console.Write("Enter messages: "); 
     string userInput = Console.ReadLine(); 
     Console.WriteLine(); 


     string Alphabet = "abcdefghijklmnopqrstuvwxyz"; 
     string AlphabetUpper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
     string result = ""; 
     Boolean SpecialChar = false; 

     foreach (char c in userInput)    
     { 
      for (int i = 0; i < Alphabet.Length; i++) 
      { 
       if (c == Alphabet[i])       
       { 
        result += Alphabet[Alphabet.Length - 1 - i]; 

       } 
       if (c == AlphabetUpper[i])      
       { 
        result += AlphabetUpper[AlphabetUpper.Length - 1 - i]; 

       } 
      } 

     } 

     //Print result for user 
     Console.WriteLine("Encoded messages: " + result); 
     Console.WriteLine(); 

     Console.Write("Press any key to exit."); 
     Console.ReadKey();    
     } 
    } 
} 
+2

你有沒有嘗試一步一步運行它。調試它?你會發現你永遠不會到達'result + = c'的行;' –

回答

0

你忘了追加字符,如果它不是a-zA-Z之間。如果不是這種情況,您可以檢查(c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')並簡單地附加cresult

+0

你能解釋一下爲什麼'(c> ='a'&& c <='z')|| (c> ='A'&& c <='Z')'工作,就像C#知道如何在不寫下字母表的情況下比較A-Z一樣? – Turbot

+0

字符只存儲爲2個字節的大數字。看一下[Unicode table](http://unicode-table.com/en/)來理解爲什麼你可以簡單地比較它們或者對它們進行數學運算 –