首页 > 解决方案 > 为什么我的 MATLAB 代码会重复除空格之外的所有符号,但会删除这些符号?

问题描述

我的目标是获取一个加密字符串并复制所有符号。因为唯一的输入将是小写,所以我忽略了考虑大写字符。

我设计我的代码来预测带有重复符号的最终结果的总长度,这就是为什么我将punct包含字符串中符号总数的变量添加到字符串的长度。迭代时,如果代码遇到一个符号,它应该将加密字符串的后续部分保存为sub,并在下一个索引中复制它遇到的符号。最后,从索引 1 到重复符号的加密字符串与保存的子字符串连接起来,我已经测试过它可以在类型和数字之间的所有符号情况下工作。我的一个问题是这不适用于空格,它会删除而不是复制空格。我逐步浏览了代码,并认为这可能是由于strcat功能。这让我感到困惑,因为应该像对待任何其他 ASCII 字符一样对待空格。当我收到错误时,它说这是由于数组超出范围。

我使用的测试用例是encrypted = hlnv.ylwb.lmxv.glow.nvand 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

标签: arraysstringmatlab

解决方案


是的,根据文档strcat删除尾随空格:

对于字符数组输入,strcat 删除尾随的 ASCII 空白字符:空格、制表符、垂直制表符、换行符、回车符和换页符。对于元胞和字符串数组输入,strcat 不会删除尾随空格。

strcat('A ', 'B')结果'AB',而strcat('A', ' B')结果'A B'。但在您的情况下,您不需要调用strcat. 相反,您可以简单地使用数组连接,就像['A ' 'B']返回您想要的输出一样,'A B'.


推荐阅读