2015-12-02 42 views
-1

我希望能夠從字符串中取出單個字符,分別操作每個字符,並將操縱字符的序列作爲一個操縱字符打印回來。我正在做的是創造一個單一的轉變凱撒Cypher。到目前爲止,我已經能夠創建一個程序,它這樣做,但只有單個字符:從字符串中讀取單個字符

string CharIn; 
string CharOut; 
int IndexIn; 
int IndexOut; 

string[] Cypher = { "[The alphabet]"}; 

Console.WriteLine("Please input a character: "); 
CharIn = Console.ReadLine(); 
IndexIn = Array.IndexOf(Cypher, CharIn); 
IndexOut = IndexIn + 1; 
CharOut = Cypher[IndexOut]; 
Console.WriteLine("Your new character is: ", CharOut); 
Console.ReadLine(); 
+0

你需要一個循環。例如,您還需要處理密碼結果字符「換行」或「溢出」的情況:「z」應該變爲「a」。你如何處理這種情況? –

+0

[凱撒密碼移位(使用字母數組)]可能的重複](http://stackoverflow.com/questions/33693247/caesar-cipher-shift-using-alphabet-array) –

回答

-1

我已經做了一些類似的計劃。 這裏是源代碼。您只需將值更改爲您的應用程序。

using System; 
using System.Text; 
using System.IO; 

/// <summary> 
/// Programm zur Verschlüsselung mittels Caesar-Verschlüsselung 
/// </summary> 
class Caesar 
{ 
/// <summary> 
/// Sortier-Arrays 
/// </summary> 
static char [] unverändert=new char[] {'0','1','2','3','4','5','6','7','8','9','Ä','ä', 
             'Ö','ö','Ü','ü','ß',' ',',','.','-','?','!','"','+','/'}; 

static char[] groß = new char[] {'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'}; 

static char[] klein = new char[] {'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' }; 
/// <summary> 
/// Main-Methode unkommentiert. 
/// </summary> 
public static void Main() 
{ 
    string ausgabe; 
    int schlüssel; 

    Console.WriteLine("Geben sie den zu verschlüsselnden Text ein:"); 
    string eingabe = Console.ReadLine(); 

    New: 
    Console.WriteLine("Geben sie den Schlüssel an:"); 
    try {schlüssel = Int32.Parse(Console.ReadLine()); } 
    catch (FormatException) 
    { 
     Console.WriteLine("Der Schlüssel muss numerisch sein!"); 
     goto New; 
    } 

    ausgabe = encode(eingabe,schlüssel); 
    decode(ausgabe, schlüssel); 

} 
/// <summary> 
/// Decodierungsmethode 
/// </summary> 
/// <param name="s">Zu decodierender String</param> 
/// <param name="z">Schlüssel</param> 
static void decode(string s,int z) 
{ 
    StringBuilder sb = new StringBuilder(); 
    char tmp = ' '; 
    z = z % 26; 

    foreach (char c in s) 
    { 

     for (int i = 0; i <= 25;i++) 
     { 
      switch (Char.Equals(c, klein[i])) 
      { 
       case true: 
        try { tmp = klein[i - z]; } 
        catch (IndexOutOfRangeException) 
        { 
         tmp = klein[i - z + 26]; 
        } 
        sb.Append(tmp); break; 
       case false: break; 
      } 

      switch (Char.Equals(c, groß[i])) 
      { 
       case true: 
        try { tmp = groß[i - z]; } 
        catch (IndexOutOfRangeException) 
        { 
         tmp = groß[i - z + 26]; 
        } 
        sb.Append(tmp); break; 
       case false: break; 
      } 
      switch (Char.Equals(c, unverändert[i])) 
      { 
       case true: 
        tmp = unverändert[i]; 
        sb.Append(tmp); break; 
       case false: break; 
      } 
     } 

     } 

    Console.WriteLine(sb); 
} 
/// <summary> 
/// Codierungsmethode 
/// </summary> 
/// <param name="s">Zu codierender String</param> 
/// <param name="z">Schlüssel</param> 
/// <returns>codierter String</returns> 
static string encode(string s,int z) 
{ 
    StringBuilder sb = new StringBuilder(); 
    char tmp=' '; 
    z = z % 26; 

    foreach (char c in s) 
    { 

     for (int i = 0; i <= 25;i++) 
     { 
      switch (Char.Equals(c, klein[i])) 
      { 
       case true: 
        try { tmp = klein[i + z]; } 
        catch (IndexOutOfRangeException) 
        { 
         tmp = klein[i + z - 26]; 
        } 
        sb.Append(tmp); break; 
       case false: break; 
      } 

      switch (Char.Equals(c, groß[i])) 
      { 
       case true: 
        try { tmp = groß[i + z]; } 
        catch (IndexOutOfRangeException) 
        { 
         tmp = groß[i + z - 26]; 
        } 
        sb.Append(tmp); break; 
       case false: break; 
      } 
      switch (Char.Equals(c, unverändert[i])) 
      { 
       case true: 
        tmp = unverändert[i]; 
        sb.Append(tmp); break; 
       case false: break; 
      } 
     } 

     } 

    Console.WriteLine(sb); 
    return sb.ToString(); 

} 

}

+0

這段代碼是故意寫爲笑話嗎? –

+0

感謝您對新編碼器的支持! 415353484F4C45 –

+0

@CallumTaylor如果你在跟我說話,Callum,請仔細閱讀代碼。它看起來不像我的新編碼器。它看起來像我用來拼湊併發送到每日WTF的巨魔代碼。單獨的開關式布爾成語會讓我深感懷疑。 –