Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays MATLAB中输入字符的编码函数_Arrays_String_Matlab_Sorting_Vector - Fatal编程技术网

Arrays MATLAB中输入字符的编码函数

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(

我想创建一个加密输入句子的函数。此加密将用ASCII表中的下一个字母替换每个单词的第一个字母,并用下一个字母替换第二个字母

因此,基本上,
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如何被加密。甚至可以考虑数字和标点符号,只是意识到在处理单元格时使用{}和()的区别。关于使用计数器,我以前不知道该行是否继续。非常感谢你的帮助!刚刚意识到在处理单元格时使用{}和()的区别。关于使用计数器,我以前不知道该行是否继续。非常感谢你的帮助!