如何优化此字符串替换代码

时间:2018-12-23 16:48:56

标签: matlab

我有一个算法,其中间步骤是用另一个子字符串替换一个子字符串。确切地说,我有一个字符串HBIN_NEW和另一个字符串P。我想用PBIN_NEW的第1、2nd,3rd元素替换字符串HREP的第6、7、8th个元素。为此,我编写了代码

     For example If PBIN_NEW='1111111101010101' and HBIN_NEW='1111100010101010' 
   then the new string HREP
   should be HREP='1111111110101101' 
      for k=1:8:262144*8
   HREP=strrep(HBIN_NEW,HBIN_NEW(k+5:k+7),PBIN_NEW(k:k+2));
end

此代码是否正确实现了上述想法?如果是的话,这种替换方案需要花费很长时间,有人可以建议一些优化的方式来实现此目的。

1 个答案:

答案 0 :(得分:2)

关于该问题的措词仍然有点尴尬,并且我不确定确切如何获得给出示例措词的HREP示例,但很可能strrep对于听起来像是在试图矫over过正做。一个带有分配的简单循环就可以了:

HREP = HBIN_NEW;
for k=1:8:length(HBIN_NEW)
   HREP(k+5:k+7) = PBIN_NEW(k:k+2);
end

通常,枚举位置分配并避免循环会更好。因此,您会有类似以下内容:

HREP = HBIN_NEW;
HREP(6:8:end) = PBIN_NEW(1:8:end);
HREP(7:8:end) = PBIN_NEW(2:8:end);
HREP(8:8:end) = PBIN_NEW(3:8:end);

我认为这可以满足您的需求,或者应该让您足够亲近...

最后,提出一些不请自来的样式建议。尽管Matlab并没有非常严格的代码样式指南,但很可能将所有大写字母都使用下划线并不是命名变量的最佳方法。我个人更喜欢带下划线的小写字母,例如pbin_new,并且仅将大写单词用作常量...