【发布时间】:2015-05-12 01:07:07
【问题描述】:
我正在尝试在 Matlab 中解决以下问题:
函数
replace_me定义如下:function w = replace_me(v,a,b,c)。第一个输入参数v是一个向量,而a、b和c都是标量。该函数将v中等于a的每个元素替换为b和c。例如命令
x = replace_me([1 2 3],2,4,5);使
x等于[1 4 5 3]。如果省略了c,它将用b的两个副本替换出现的a。如果b也被省略,它会将每个a替换为两个零。”
这是我目前所拥有的:
function [result] = replace_me(v,a,b,c)
result = v;
for ii = 1:length(v)
if result(ii) == a
result(ii) = b;
result(ii +1) = c;
end
end
end
该函数将v 中与a 相同的值替换为b,但我无法将a 替换为b 和c。任何帮助将非常感激。
编辑:
我已经更新了我的代码:
function [v] = replace_me(v,a,b,c)
for ii = 1:length(v)
if v(ii) == a
v = horzcat(v(1:ii-1), [b c], v(ii+1:end));
fprintf('%d',v);
elseif v(ii) == a && length(varargin) == 3
v = horzcat(v(1:ii-1), [b b], v(ii+1:end));
fprintf('%d',v);
elseif v(ii) == a && length(varargin) == 2
v = horzcat(v(1:ii-1), [0 0], v(ii+1:end));
fprintf('%d',v);
else
fprintf('%d',v);
end
end
end
我在尝试 replace_me([1 2 3 4 5 6 7 8 9 10], 2, 2) 时收到以下错误:
replace_me([1 2 3 4 5 6 7 8 9 10],2,2) 12345678910 使用 replace_me 时出错(第 4 行) 输入参数不足。
【问题讨论】:
-
你的算法错了,请试试我的,你没有考虑到向量在遍历它时会增加他的大小。除此之外,如果你想使用可变数量的参数,你应该使用
varargin,看看documentation。如果你喜欢我的回答,请采纳。