解码莫尔斯电码问题

解码莫尔斯电码问题

问题描述:

我一直在努力如何完成这项任务很长一段时间,并决定我需要一些帮助。我必须将莫尔斯码转换为英文,并输出所有可能的翻译到列表框(甚至是乱码)。 搜索已经出现了很多不同的线程,但没有用,因为它们不是这种语言,或者它们已经过时(VB6)代码。 分配状态:解码莫尔斯电码问题

使用典型的点和破折号( - )的代码的书面陈述,字... ---在莫尔斯电码..-....-()。可能是名字索非亚或欧根尼的编码,取决于你在哪里拆分字母: ... | --- | ..-。| .. | .-。索非亚 。| ..- | - 。。| 。 - - 。| .. | .- - Eugenia

其中管道只是显示如何分解字符串。

我已经尝试了“For Each”循环,“For”循环,写入文本文件和回读,分割字符串1到4个字符,Select Case方法和上述所有组合,我可以想到没有运气。 我的For循环会产生一组26个任务,但不包含任何单词,只是一系列空格,然后是单个字母26次,然后是该字母两次26次,依此类推。 文本文件和将字符串拆分为一个或两个字符导致E,A或T用于输出,每个都在其自己的行上乘以字符串中的迭代次数,并且将字符串拆分三个或四个字符会导致相同或者如果字符串没有均匀分割,则会出现IndexOutOfRange错误。 我已经回到了我编写的实际工作中最接近的东西,但输出的结果仍然是英文字母。

这次我使用了一个Linq查询,并希望得到任何帮助,了解如何正确地遍历字符串以完成作业所要求的内容。

这里是我的代码至今:

Imports System.IO 
Imports System.Text 

Public Class Form1 

    Dim MorseCode() = File.ReadAllLines("MorseCode2.txt") 

    Private Sub input_TextChanged(sender As Object, e As EventArgs) Handles input.TextChanged 

    End Sub 

    Private Sub output_SelectedIndexChanged(sender As Object, e As EventArgs) Handles output.SelectedIndexChanged 

    End Sub 

    Private Sub help_Click(sender As Object, e As EventArgs) Handles help.Click 

     'Displays the Morse Code and English letter equivalents 
     Process.Start("MorseCode.txt") 

    End Sub 

    Private Sub translate_Click(sender As Object, e As EventArgs) Handles translate.Click 

     Dim userText As String = input.Text 
     Dim temp As String 
     Dim word As String 

     'Search the users entry for possible translations 
     Dim query = From line In MorseCode 
        Let data = line.split(","c) 
        Let engLtr = data(0) 
        Let code = data(1) 
        Select engLtr, code 

     For Each code In query 
      If userText.Contains(code.code) Then 
       temp = code.engLtr 
       word = String.Concat(temp + temp) 
       output.Items.Add(word) 
      End If 
     Next 

    End Sub 

End Class 

我敢肯定我的错误是在.Concat呼叫,但没有我尝试已经解决了这个问题。

谢谢你给我的任何指针!

编辑补充伪代码:

1 - 读取输入字符串

2 - 突破字符串为单个元素各1个符号,匹配符号信,发送到温度,CONCAT字符串转换为文字,输出各字列表框

3 - 重读串闯入两个符号每个 “......”

4 - “...” 三个符号每个 “......”

5 - “...”四个符号每个“......”

+0

Eew,他们教VB吗?毛。至于赋值,它是一个返回可枚举字符串的方法中的尾递归。收益报表将使这个非常干净。 “查找所有匹配字符串开头的字符,对于每个字符,再次调用相同的方法传递剩余的字符串,然后将每个返回的结果与此字符连接起来,并将其传递给直接调用者。就这么简单。 – Will

+1

@有些学校还会教cobol么?你应该删除你的第一句...... – Fredou

+2

@如果他们教C#或Java,它会“更酷”吗? '因为这些语言与VB.Net非常相似。 – ChicagoMike

我被给了一个答案[在这里],并能够实现这个想法到我自己的程序。感谢所有帮助我的人! 1

我已经试过‘对于每一个’循环‘for’循环,写1到文本文件和读回,分割字符串4字符,Select Case方法和上述的所有组合,我可以想到没有运气。

这就像说“我要准备可口的饭菜,我已经试过糖,肉,奶,盐,煤气炉,电炉,清洗厨房,煎锅,叉子和以上所有的组合我都能想到,没有运气。“

你明显缺少的是配方。在计算机科学方面,这是算法。我建议你做以下事情:

  1. 离开计算机。拿一张纸和一支铅笔。

  2. 试着手工解决问题。以...---..-....-为例,并尝试查找所有可能的含义。

  3. 当你完成后,想想如何你解决了这个问题。你做了什么来确保你不会错过任何可能的含义?尝试用简单的英文写下你采取的步骤。这是你的算法

  4. 现在您可以开始将您的算法转换为您选择的编程语言。

如果您有任何与这些步骤麻烦,我建议你开始一个新的问题,并要求有关这一点专门。不要忘记提及你尝试过的方法以及你卡在哪里。

+0

好吧,以及我卡住的地方是通过正确的输入莫尔斯码获得迭代。纸是一回事,我不会崩溃或抛出像这样的代码的异常错误。 我通过子字符串方法分割字符串,类似于我的for循环中的“i = 0到userInput.Substring(0,2)第2步” ,这是行不通的。我在那里有四个if语句,用于将字符串按英文字母的莫尔斯等同长度拆分。 –

+0

因此,现在我回到上面的代码,它可以识别每组代码字符并输出相关的字母,只是不会遍历字符串来产生一个字。这是我卡住的地方,这就是我所问的。我不相信就相同的材料提出单独的问题是有益的,但我很欣赏这种回应。 –

+0

@Stryke_the_Orc:我明白了。那么,让我们从你的算法开始吧。你可以将它添加到你的问题(用普通的伪代码)吗?然后,我们可以检查它并确定它是否正确。如果不是这样,所有试图将其放入代码的尝试都是徒劳的。 – Heinzi