arrays - 为什么我的 MATLAB 代码会重复除空格之外的所有符号,但会删除这些符号?
问题描述
我的目标是获取一个加密字符串并复制所有符号。因为唯一的输入将是小写,所以我忽略了考虑大写字符。
我设计我的代码来预测带有重复符号的最终结果的总长度,这就是为什么我将punct
包含字符串中符号总数的变量添加到字符串的长度。迭代时,如果代码遇到一个符号,它应该将加密字符串的后续部分保存为sub
,并在下一个索引中复制它遇到的符号。最后,从索引 1 到重复符号的加密字符串与保存的子字符串连接起来,我已经测试过它可以在类型和数字之间的所有符号情况下工作。我的一个问题是这不适用于空格,它会删除而不是复制空格。我逐步浏览了代码,并认为这可能是由于strcat
功能。这让我感到困惑,因为应该像对待任何其他 ASCII 字符一样对待空格。当我收到错误时,它说这是由于数组超出范围。
我使用的测试用例是encrypted = hlnv.ylwb.lmxv.glow.nv
and 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
解决方案
是的,根据文档strcat
删除尾随空格:
对于字符数组输入,strcat 删除尾随的 ASCII 空白字符:空格、制表符、垂直制表符、换行符、回车符和换页符。对于元胞和字符串数组输入,strcat 不会删除尾随空格。
即strcat('A ', 'B')
结果'AB'
,而strcat('A', ' B')
结果'A B'
。但在您的情况下,您不需要调用strcat
. 相反,您可以简单地使用数组连接,就像['A ' 'B']
返回您想要的输出一样,'A B'
.
推荐阅读
- python - Python - 转换 DataFrame 以进行合并
- r - 使用不同列的先前值和自身的先前值创建新列
- arduino - Arduino MQTT disconnect
- apache-flink - CassandraRowWriteAheadSink uses milliseconds for timestamp instead of microseconds
- ios - How to send Dictionary as parameter to the Get Request Swift
- c# - ClosedXml InsertTable with IEnumerable property
- python-3.x - how to properly call the edge browser with selenium?
- arduino - Error using 'synaser.pas' with FreePascal (Lazarus)
- sql - 解析 SQL - 从表中选择的所有 Teradata 关键字
- reactjs - 使用 jspdf 创建的 pdf 无法在 Edge 中打开