2016-04-11 9 views
-1

Ich bin neu in der Programmierung und C# und ich versuche, Atbash Cipher in C# zu machen. So bin ich bei diesem Problem fest: die Chiffre lief gut, aber sie setzen keine Leerzeichen oder Sonderzeichen (die nicht codieren müssen) in das Ergebnis. Ich habe versucht es zu machen, aber es wurde wiederholt.Atbash Cipher in C#

Gibt es also eine Möglichkeit, die Nicht-Alphabet-Zeichen zu überspringen und sie auf das Ergebnis zu setzen?

Hier ist mein Code

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

Haben Sie versucht, es Schritt für Schritt aka zu laufen. debuggen Sie es? Sie werden feststellen, dass Sie nie eine Zeile erreichen, die 'result + = c;' ist. –

Antwort

0

Sie haben vergessen, den Charakter anhängen, wenn sie nicht zwischen a-z oder A-Z ist. Sie können prüfen, ob (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') und einfach c an result anhängen, wenn das nicht der Fall ist.

+0

Können Sie mir erklären, warum '(c> = 'a' && c <= 'z') || (c> = 'A' && c <= 'Z') 'Arbeit, so wie C# wissen, wie man zwischen A-Z vergleicht, ohne das Alphabet aufzuschreiben? – Turbot

+0

Zeichen werden nur als 2 Byte große Zahlen gespeichert. Sehen Sie sich die [Unicode-Tabelle] (http://unicode-table.com/de/) an, um zu verstehen, warum Sie sie einfach vergleichen oder mathematische Operationen mit ihnen durchführen können –