Arrays 为什么我的MATLAB代码会复制除空格以外的所有符号(它会删除空格)?
我的目标是获取一个加密字符串并复制所有符号。因为唯一的输入是小写的,所以我忽略了考虑大写字符 我将代码设计为使用重复符号预测最终结果的总长度,这就是为什么我将Arrays 为什么我的MATLAB代码会复制除空格以外的所有符号(它会删除空格)?,arrays,string,matlab,Arrays,String,Matlab,我的目标是获取一个加密字符串并复制所有符号。因为唯一的输入是小写的,所以我忽略了考虑大写字符 我将代码设计为使用重复符号预测最终结果的总长度,这就是为什么我将punct(一个包含字符串中符号总数的变量)添加到字符串长度中。迭代时,如果代码遇到符号,则应将加密字符串的后续部分保存为sub,并在下一个索引中复制它遇到的符号。最后,从索引1到复制符号的加密字符串与保存的子字符串连接在一起,我已测试该子字符串在所有符号情况下都能工作,介于类型和数字之间。我的一个问题是,这将不适用于空格,它会删除而不是复
punct
(一个包含字符串中符号总数的变量)添加到字符串长度中。迭代时,如果代码遇到符号,则应将加密字符串的后续部分保存为sub
,并在下一个索引中复制它遇到的符号。最后,从索引1到复制符号的加密字符串与保存的子字符串连接在一起,我已测试该子字符串在所有符号情况下都能工作,介于类型和数字之间。我的一个问题是,这将不适用于空格,它会删除而不是复制空格。我逐级查看了代码,认为这可能是由于strcat的。这让我感到困惑,因为空格应该像对待任何其他ASCII字符一样对待。当我得到一个错误,它说这是由于数组超出范围
我使用的测试用例是encrypted=hlnv.ylwb.lmxv.glow.nv
和hlnv-ylwb-lmxv-glow-nv
。在这两个中,punct
都是4,因为每个字符中有4个非字母字符
criticallength = length(encrypted) + punct;
ii = 1;
while ii <= criticallength
if encrypted(ii) < 97 || encrypted(ii) > 122
sub = encrypted(ii + 1:end);
encrypted(ii + 1) = encrypted(ii);
encrypted = strcat(encrypted(1:ii + 1), sub);
ii = ii + 1;
end
ii = ii + 1;
end
criticallength=长度(加密)+点;
ii=1;
而ii 122
sub=加密(ii+1:结束);
加密(ii+1)=加密(ii);
加密=strcat(加密(1:ii+1),sub);
ii=ii+1;
结束
ii=ii+1;
结束
是,strcat
根据以下内容删除尾随空格:
对于字符数组输入,strcat将删除尾随的ASCII空白
字符:空格、制表符、垂直制表符、换行符、回车符和
表单提要。对于单元格和字符串数组输入,strcat不会删除
尾随空白
这意味着strcat('A','B')
结果'AB'
,而strcat('A','B')
结果'AB'
。但是,在您的情况下,您不需要调用strcat
。相反,您可以简单地使用数组连接,如返回所需输出的['A''B']
,'A B'
请包含加密的和点播的定义,以便我们可以运行您的代码并看到它工作。特别是,MATLAB中的字符串和字符数组之间存在差异,这在这里非常相关。“我使用的测试用例是encrypted=hlnv.ylwb.lmxv.glow.nv
”,这省略了我所询问的关键信息。请注意,这不是有效的MATLAB语法。要么是e='str'
,要么是e=“str”
,这两种情况都会在MATLAB中导致截然不同的行为。请具体一点,发布一个独立完整的代码块,这样我们就可以复制粘贴它了。这是避免不精确的最好方法。看见