【发布时间】:2015-07-20 16:42:20
【问题描述】:
我一直在为如何完成这项任务而苦苦挣扎,并决定我需要一些帮助。我必须将莫尔斯电码转换为英语并将所有可能的翻译输出到列表框(甚至是乱码)。 搜索已经出现了很多不同的线程,但没有任何用处,因为它们要么不是这种语言,要么是过时的 (VB6) 代码。 作业指出:
使用典型的点 (.) 和破折号 (-) 作为代码的书面表示,摩尔斯电码中的单词 ...----..-..- 可能是名称 Sofia 的编码或 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 个符号,将符号匹配到字母,发送到临时,将字符串连接成单词,将每个单词输出到列表框
3 - 重新读取字符串分成两个符号,每个“...”
4 - “...”三个符号,每个“...”
5 - “...”四个符号,每个“...”
【问题讨论】:
-
哎呀,他们在教VB?总的。至于赋值,它是一个返回可枚举字符串的方法中的尾递归。收益声明将使这非常干净。 “查找与字符串开头匹配的所有字符。对于每个字符,再次调用相同的方法并传入剩余的字符串,然后将每个返回的结果与该字符连接起来,并将其交给直接调用者。”就这么简单。
-
@一些学校还会教cobol吗?你应该删除你的第一句话....
-
@Will 如果他们教 C# 或 Java,会不会“更酷”? '因为这些语言与 VB.Net 非常相似。
-
关于你的伪代码:这会给你
.|.|.|-|-|-|etc和..|.-|--|etc,但是..|.|---|etc呢? -
这就是问题所在,我尝试将 If 语句与每个子字符串方法一起使用来获取所有可能的字符串组合,但它要么让我陷入无限循环,要么只是让应用程序完全崩溃。
标签: vb.net