【发布时间】:2020-11-14 03:04:11
【问题描述】:
我的目标是获取一个加密字符串并复制所有符号。因为唯一的输入是小写,所以我忽略了考虑大写字符。
我设计我的代码来预测包含重复符号的最终结果的总长度,这就是为什么我将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
【问题讨论】:
-
请包含
encrypted和punct的定义,以便我们可以运行您的代码并查看它是否正常工作。特别是,MATLAB 中的字符串和字符数组之间存在差异,这在这里非常相关。 -
“我使用的测试用例是
encrypted = hlnv.ylwb.lmxv.glow.nv”这忽略了我所询问的关键信息。请注意这不是有效的 MATLAB 语法。它是e='str'或e="str",这两种情况会导致 MATLAB 中的行为截然不同。请具体点,贴一个独立完整的代码块,我们可以复制粘贴。这是避免不精确的最好方法。见minimal reproducible example。