我正在尝试在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
,则会将a
的出现替换为b
的两个副本。如果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行) 没有足够的输入参数。
答案 0 :(得分:2)
通过计算a
中v
出现的次数,您可以计算结果向量length(v) + sum(v == a)
的大小,然后您可以迭代向量并插入[b c]
每次找到匹配项。每次插入新元素时,您应该将计数器ii
增加2,否则如果a=b
,您将使用a
填充向量的剩余部分。它不是一种有效的算法,但它与您的实现类似
result = v;
rep = sum(result == a);
if rep == 0
return
end
for ii = 1:(length(result) + rep)
if result(ii) == a
result = [result(1:ii-1), [b c], result(ii+1:end)];
ii = ii + 2;
end
end
一个有效的替代方案(没有矢量大小调整)可能是:
rep = sum(v == a);
if rep == 0
result = v;
return;
end
result = zeros(1, length(v) + rep);
idx = 1;
for ii = 1:length(v)
if v(ii) == a
result(idx) = b;
result(idx+1) = c;
idx = idx + 2;
else
result(idx) = a;
idx = idx + 1;
end
end
答案 1 :(得分:2)
以下是另一种选择:(原来{@ 3}}来自@A。Donda)
这具有替换多次出现
的优点function [result] = replace_me(v,a,b,c)
if nargin == 3
c = b;
end
if nargin == 2
c = 0;
b = 0;
end
result = v;
equ = result == a;
result = num2cell(result);
result(equ) = {[b c]};
result = [result{:}];
end
<强>结果:强>
>> x = replace_me([1 2 3],2,4,5)
x =
1 4 5 3
>> x = replace_me([1 2 3],2)
x =
1 0 0 3
>> x = replace_me([1 2 3],2,4)
x =
1 4 4 3
>> x = replace_me([1 2 3 2], 2, 4, 5)
x =
1 4 5 3 4 5
答案 2 :(得分:1)
可以是这样的:
function result = replace_me(v, a, b, c)
result = [];
for ii = 1:length(v)
if v(ii) == a
result = [result, b, c];
else
result = [result, v(ii)];
end
end
end
关于错误&#34;使用replace_me时出错(第4行)没有足够的输入参数。&#34;,这只是因为你用4个输入参数编写了函数,而你只用3调用。