编写一个名为replace的函数,它接受三个输入:字符串的单元格向量(行或列)和两个字符:c1和c2。该函数返回单元格向量不变,除了每个字符串中的每个c1实例都被c2替换。您不能使用内置函数strrep
e.g
>> b = replace ({'XOXO' 'XOXO'}, 'X', 'Y')
b =
'YOYO' 'YOYO'
到目前为止,我已经提出了这个想法
function m = replace (A, c1, c2)
[rows,column]=size(A); %size of A
[r,c]=size(A{1}); % size of substring
for i=1:column
o=A{i};; %Fetching element of string
for j=1:c
p= o(j);% fetching string in substring
if p==c1
p(j)=c2;% replacing c1 by c2
else
p(j)=o(j);% returning as it it
end
a(j)=p(j)% storing elements of first string
t=a
end
end
m=t
end
在输出中我得到YOYO我无法想出用第一个字符串存储第二个字符串的方法。 请帮忙
答案 0 :(得分:3)
不可否认,这不是最简单的方法,但可以使用cellfun
(悬停鼠标来查看)在一行(加上函数声明)中完成:
function m = replace(A, c1, c2)
m = cellfun(@(x) char((x==c1).*c2+(x~=c1).*x), A, 'uniformoutput', 0);
或者作为匿名函数(单行,包括所有内容)
replace = @(A,c1,c2) cellfun(@(x) char((x==c1).*c2+(x~=c1).*x), A, 'uniformoutput', 0);