Arrays MATLAB中输入字符的编码函数
我想创建一个加密输入句子的函数。此加密将用ASCII表中的下一个字母替换每个单词的第一个字母,并用下一个字母替换第二个字母 因此,基本上,Arrays MATLAB中输入字符的编码函数,arrays,string,matlab,sorting,vector,Arrays,String,Matlab,Sorting,Vector,我想创建一个加密输入句子的函数。此加密将用ASCII表中的下一个字母替换每个单词的第一个字母,并用下一个字母替换第二个字母 因此,基本上,abc def的结果输出应该是bcd efg。但是,当我运行我的函数时,空格也将被替换,即输出将是bcd!efg。为什么会这样?谢谢 以下是我写的: function out = encrypt(input) ascii_encode=double(input); line={ascii_encode}; counter=0; for a=1:length(
abc def
的结果输出应该是bcd efg
。但是,当我运行我的函数时,空格也将被替换,即输出将是bcd!efg
。为什么会这样?谢谢
以下是我写的:
function out = encrypt(input)
ascii_encode=double(input);
line={ascii_encode};
counter=0;
for a=1:length(line)
if line{a}==32
counter=0;
else
counter=counter+1;
line{a}=line{a}+counter;
end
line{a}=char(line{a});
end
out=line;
end
你应该小心处理电池 尝试
行{a}
,行(a)
,行(1){a}
,了解它们是如何工作的
代码应该是这样的
function out = encrypt(input)
ascii_encode = double(input);
line = {ascii_encode};
for a = 1 : length(line{1})
if line{1}(a) == 32
continue;
end
line{1}(a) = line{1}(a) + 1;
end
line{1} = char(line{1});
out = line{1};
end
而且不需要使用
计数器
,只要在时跳转即可。如果为真
,则应小心处理单元格
尝试行{a}
,行(a)
,行(1){a}
,了解它们是如何工作的
代码应该是这样的
function out = encrypt(input)
ascii_encode = double(input);
line = {ascii_encode};
for a = 1 : length(line{1})
if line{1}(a) == 32
continue;
end
line{1}(a) = line{1}(a) + 1;
end
line{1} = char(line{1});
out = line{1};
end
而且不需要计数器
,只要在为真的情况下
你就可以跳转了。您将输入分配给一个单元格,然后访问的不是单元格值(仍然是字符数组)中的索引,而是完整的单元格值
如果您仍然想使用cells类型,请遵循Kamtal的答案,并查看文档
请注意,您还可以受益于Matlab矢量化功能,并通过以下方式简化您的功能:
function out = encrypt(input)
charToKeep = ( input==' ' ) ; %// save position of character to keep
out = char(input+1) ; %// apply the modification on the full string
out(charToKeep) = ' ' ; %// replace the character we saved in their initial position
end
卡姆塔尔的回答完全正确。您将输入分配给一个单元格,然后访问的不是单元格值(仍然是字符数组)中的索引,而是完整的单元格值
如果您仍然想使用cells类型,请遵循Kamtal的答案,并查看文档
请注意,您还可以受益于Matlab矢量化功能,并通过以下方式简化您的功能:
function out = encrypt(input)
charToKeep = ( input==' ' ) ; %// save position of character to keep
out = char(input+1) ; %// apply the modification on the full string
out(charToKeep) = ' ' ; %// replace the character we saved in their initial position
end
这很有趣,谢谢分享。谢谢澄清!这很有趣,谢谢分享。谢谢澄清!除非你以后想做更多的事情,否则在你的情况下,使用细胞是相当过分和不必要的。您可以直接对字符串(char数组)进行处理。尽管您的问题已得到答复,但您可能需要考虑边缘情况,如字母Z如何被加密。甚至可以考虑数字和标点符号,除非以后你想做更多的事情,否则在你的情况下使用单元格是相当多余的。您可以直接对字符串(char数组)进行处理。尽管您的问题已得到答复,但您可能需要考虑边缘情况,如字母Z如何被加密。甚至可以考虑数字和标点符号,只是意识到在处理单元格时使用{}和()的区别。关于使用计数器,我以前不知道该行是否继续。非常感谢你的帮助!刚刚意识到在处理单元格时使用{}和()的区别。关于使用计数器,我以前不知道该行是否继续。非常感谢你的帮助!