2015-05-28 8 views
1

Напишите функцию, которая заменяет собой три входа: вектор ячейки (строка или столбец) строк и два символа: c1 и c2. Функция возвращает вектор ячейки без изменений, за исключением того, что каждый экземпляр c1 в каждой строке заменяется на c2. Вы не можете использовать встроенную функцию strrepСохраните вторую строку с первой

например

>> 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

' M' будет в конечном итоге в виде массива ячеек 'размера (A)'. Индексируйте его с помощью 'i', как будто вы индексируете' A' для остальной части функции. – excaza

ответ

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

+0

PLS отредактируйте свой кодовый блок :) – scmg

+0

@scmg Что значит? Есть ли ошибка? Или вы не заметили, что вам нужно навестить мышь? (Я отредактировал ответ, чтобы включить это, я думал, что это хорошо известно) –

+0

О, да, это то, что вы сделали специально? :) – scmg

Смежные вопросы