很长一段时间以来,我一直在为如何完成这项任务而苦苦挣扎,于是我决定需要一些帮助。我必须将morse代码转换成英语,并将所有可能的翻译输出到一个列表框中(甚至是胡言乱语)。搜索已经发现了很多不同的线程,但是没有什么有用的,因为它们不是在这种语言中,也不是在过时的(VB6)代码中。任务规定如下:
使用典型的点(.)破折号(-)作为代码的书面表示,单词.
管的位置只是为了显示字符串是如何被分开的。
我尝试过“每个循环”、“循环”、写文本文件和读取、将字符串拆分为1到4个字符、一个Select方法以及所有我能想到的没有运气的组合。我的For循环产生了26个所有的集合,但是没有单词,只有一系列空格,然后是一个字母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符号,匹配符号对字母,发送到临时字符串,将字符串转换为word,将每个单词输出到列表框中。
3-重读字符串,分成两个符号,每个符号“.”
4-“.”三个符号每个“.”
5-“.”四个符号“.”
发布于 2015-07-22 14:29:48
我在这里得到了一个答案,并能够将这个想法落实到我自己的计划中。感谢所有帮助我走出
的人
发布于 2015-07-20 16:53:52
我尝试过“每个循环”、“循环”、写文本文件和读取、将字符串拆分为1到4个字符、一个Select方法以及所有我能想到的没有运气的组合。
这就像说:“我想准备一顿美味的饭菜,我试过糖、肉、牛奶、盐、煤气炉、电炉、清洁厨房、煎锅、叉子,以及我能想到的所有这些都没有运气。”
你显然缺少的是一个菜谱。在计算机科学方面,这是一种算法。我建议你做以下事情:
...---..-....-为例,尝试找到所有可能的含义。如果您在这些步骤中有任何问题,我建议您开始一个新的问题,并就这一点提出具体的问题。别忘了提到你尝试过的方法,以及你被困在哪里。
发布于 2020-11-30 22:17:33
Lang = {}
Concealer = {}
Reveal = {}
bottle = []
Mess1 = []
Mess2 = []
with open('69_Morse.txt', 'r') as translate:
for line in translate:
L, M = line.split()
Lang[M] = L
secret = open('SECRET.txt', 'r')
glasses = secret.read()
bottle = (glasses.replace("\n", " \n ")).split(" ")
secret.close()
for i in range(0, len(bottle)):
if bottle[i] in Lang:
Mess1.append(Lang[bottle[i]])
if bottle[i] == "\n":
Mess1.append(bottle[i])
for i in range(0, len(Mess1)):
if Mess1[i] in Reveal:
Mess2.append(Reveal[Mess1[i]])
else:
Mess2.append(Mess1[i])
Final = ("".join(Mess2))
with open("CodeBook.txt", 'r') as rosetta:
for line in rosetta:
a, b = line.split()
Concealer[a] = b
c, d = line.split()
Reveal[d] = c
f = open('69_MSG.txt', 'w')
f.write(Final)
f.close()
#Second file of code
import numpy as np
np.random.seed(20201123)
RandNumb = []
Code = []
RandLet = []
AlphaNum = {1: }
while len(RandNumb) != 26:
val = np.random.randint(1,27)
if val not in RandNumb:
RandNumb.append(val)
for i in range(0, len(RandNumb)):
RandLet.append(AlphaNum[RandNumb[i]])
with open("MorseCode.txt", 'r') as Morse:
for line in Morse:
line = line.strip('\n')
Code.append(line[2:])
f = open('69_Morse.txt', 'w')
for i in range(0, len(RandLet)):
f.write(RandLet[i] + " " + Code[i] + "\n")
f.close()https://stackoverflow.com/questions/31521882
复制相似问题