2011-12-16 266 views
3

當我嘗試將輸入的莫爾斯電碼替換爲文本時,出現問題。基本上問題在於,當用戶輸入「。」時,prorgram打印字母「E」(在莫爾斯電碼中爲「。」)並忽略其後的所有其他時段,以製作其他具有兩個或更多個連續字母的字母週期。將莫爾斯電碼解碼爲文本

我應該如何解決這個問題?

我知道這可能是一個非常新手的問題,但我一直在努力尋找答案。

下面的代碼

public partial class Morsetext : PhoneApplicationPage 
{ 

    public string[] aakkoset = { ".", "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", "Ä", "Ö", "0", "1", 
           "2", "3", "4", "5", "6", 
           "7", "8", "9", "?", ":", 
           ",", "@", "/", "=", " ", 
           }; 
    public string[] morse = {".-.-.-", ".-", "-...", "-.-.", "-..", ".", 
           "..-.", "--.", ".... ", "..", ".---", 
           "-.-", ".-..", "--", "-.", "---", 
           ".--.", "--.-", ".-.", "...", "-", 
           "..-", "...-", ".--", "-..-", "-.--", 
           "--..", ".-.-", "---.", "-----", ".----", 
           "..---", "...--", "....-", ".....", "-....", 
           "--...", "---..","----.", "..--..", "---...", 
           "-....-", ".--.-.", "-..-.", "-...-", " ", 
           }; 

    public Morsetext() 
    { 
     InitializeComponent(); 
    } 

    private void bShort_Click(object sender, RoutedEventArgs e) 
    { 
     char piste = '.'; 

     tBoxMorse2.Text += piste.ToString(); 

    } 

    private void tBoxMorse2_TextChanged(object sender, TextChangedEventArgs e) 
    { 

     tBlockText2.Text = tBoxMorse2.Text.ToUpper() 
      .Replace(morse[0],aakkoset[0]) 
      .Replace(morse[1],aakkoset[1]) 
      .Replace(morse[2],aakkoset[2]) 
      .Replace(morse[3],aakkoset[3]) 
      .Replace(morse[4],aakkoset[4]) 
      .Replace(morse[5],aakkoset[5]) 
      .Replace(morse[6],aakkoset[6]) 
      .Replace(morse[7],aakkoset[7]) 
      .Replace(morse[8],aakkoset[8]) 
      .Replace(morse[9],aakkoset[9]) 
      .Replace(morse[10],aakkoset[10]) 
      .Replace(morse[11],aakkoset[11]) 
      .Replace(morse[12],aakkoset[12]) 
      .Replace(morse[13],aakkoset[13]) 
      .Replace(morse[14],aakkoset[14]) 
      .Replace(morse[15],aakkoset[15]) 
      .Replace(morse[16],aakkoset[16]) 
      .Replace(morse[17],aakkoset[17]) 
      .Replace(morse[18],aakkoset[18]) 
      .Replace(morse[19],aakkoset[19]) 
      .Replace(morse[20],aakkoset[20]) 
      .Replace(morse[21],aakkoset[21]) 
      .Replace(morse[22],aakkoset[22]) 
      .Replace(morse[23],aakkoset[23]) 
      .Replace(morse[24],aakkoset[24]) 
      .Replace(morse[25],aakkoset[25]) 
      .Replace(morse[26],aakkoset[26]) 
      .Replace(morse[27],aakkoset[27]) 
      .Replace(morse[28],aakkoset[28]) 
      .Replace(morse[29],aakkoset[29]) 
      .Replace(morse[30],aakkoset[30]) 
      .Replace(morse[31],aakkoset[31]) 
      .Replace(morse[32],aakkoset[32]) 
      .Replace(morse[33],aakkoset[33]) 
      .Replace(morse[34],aakkoset[34]) 
      .Replace(morse[35],aakkoset[35]) 
      .Replace(morse[36],aakkoset[36]) 
      .Replace(morse[37],aakkoset[37]) 
      .Replace(morse[38],aakkoset[38]) 
      .Replace(morse[39],aakkoset[39]) 
      .Replace(morse[40],aakkoset[40]) 
      .Replace(morse[41],aakkoset[41]) 
      .Replace(morse[42],aakkoset[42]) 
      .Replace(morse[43],aakkoset[43]) 
      .Replace(morse[44],aakkoset[44]); 

    } 
+3

那「替換」語句使我的眼睛流血。 – jvenema 2011-12-16 21:37:18

+0

對於醜陋的語法,我很抱歉。我仍然在學習這些東西。 – 2011-12-16 22:53:58

回答

2

最簡單的解決方案是從最長的莫爾斯字符串重新排序內容替換第一至最短莫爾斯串最後。

+0

非常感謝!我做了這個,現在它像一個魅力工作! – 2011-12-16 22:51:19