我有一个算法,其中间步骤是用另一个子字符串替换一个子字符串。确切地说,我有一个字符串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
此代码是否正确实现了上述想法?如果是的话,这种替换方案需要花费很长时间,有人可以建议一些优化的方式来实现此目的。
答案 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
,并且仅将大写单词用作常量...