用第一个字符串存储第二个字符串

时间:2015-05-28 21:59:13

标签: matlab

编写一个名为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我无法想出用第一个字符串存储第二个字符串的方法。 请帮忙

1 个答案:

答案 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);