问题描述
push button callback to convert to Morse
嗨,我有一个问题,我应该在 MATLAB 中创建一个 GUI,将字母和数字转换为摩尔斯电码,但我的代码无法运行,上面附加的图像链接用于按钮回调。它还说红色下划线的“Morse”需要预先分配以提高速度,因为它每次循环迭代都会改变大小。我应该如何处理这个问题?谢谢..
此外,我是否应该在我的 edit1 和 edit2 回调下包含任何内容?因为 edit1 只用于输入数字和字母,edit2 只用于输出莫尔斯电码。再次感谢! edit1 & edit2 callbacks
解决方法
- “Morse”每次循环迭代都会改变大小。首先,让我们定义 2 个变量。
Morse_1 = [];
Morse_2 = zeros(1,100);
(我冒昧地定义矩阵而不是字符串,但这更容易解释这个概念)。您基本上是说 Morse_1
是可以填充的空白变量,而 Morse_2
具有固定尺寸。像 Morse_1
这样的空白变量的维度(如果我没有使用正确的名称,请原谅我,但我认为空白变量很好地解释了它)是灵活的。这意味着做
Morse_1(1,101) = 1
会起作用(Morse_1
将是一个 101 维向量,在第 101 个位置有 100 个零和 1)。做
Morse_2(1,101) = 1
也可以使用,但如果您大大高估了维度(例如,零 (1,1000) 但您的消息实际上只有几百个),您最终可能会得到太多未使用的元素。
在您的情况下,我将使用一个空白变量,因为您事先并不真正知道您的编码信息将持续多长时间(即使您知道原始字符串中的字符数,编码信息也会如果全部为 '9,则比全部为 'e 的时间长 5 倍)。这个警告在处理 1000x1000 矩阵时非常有用,但对于处理字符串我会忽略它。
总而言之,如果您不知道它会持续多长时间,或者您的代码无法处理可变长度,或者您不知道,我将使用一个空白变量不想担心计算到底需要多少元素。另一方面,如果您的代码需要一个正确维度的数组,或者您正在处理非常大的数组,我会使用固定维度。但是,在很多情况下,您真的不会注意到速度差异(填充空白数组可能需要 0.01 秒,而填充固定维度可能需要 0.001 秒。除非您这样做一千次(为什么? ?),它实际上是不引人注意的)。
- 就我个人而言,我会像这样使用
strrep()
更改此循环的工作方式:
for i=1:length(alphabet) %alphabet = 26 letters+10 numbers+space,37 characters in total
original_message = strrep(original_message,alphabet{i},morse_alphabet{i});
end
strrep(a,b,c)
在 b
中找到子串 a
并将其替换为 c
。在您的情况下,字母表与字典 chars
相同,而 morse_alphabet 与字典 code
相同。
至于回调,我真的不知道,所以我不能帮你。