2015-07-30 3 views
1
Input= 'DA EA DA BD FA ED GE AA CA BB CC FB BC CB CF' 

Как удалить повторяющиеся пары в указанном выше вводе и удалить пары, которые имеют одинаковые символы? В этом случае пары должны быть удалены: второй «DA», «AA», «BB», «CC».Удалить пары в строке (Matlab)

Ожидаемый результат должен быть:

Output= 'DA EA BD FA ED GE CA FB BC CB CF' 

ответ

2

Использование strsplit разделить строки, используя пробел в качестве разделителя, а затем использовать unique с 'stable' флагом, чтобы мы удалить дубликаты и обеспечение уникальных строк находятся в одном порядке. Это удаляет повторяющиеся строки, но не строки, которые содержат один и тот же символ. Для этого мы проверим каждую строку и проверим, соответствует ли разница между последовательными символами равным 0. Мы используем diff для каждой строки в сочетании с all, чтобы сделать это для нас. Если все последующие различия равны 0, мы отфильтровываем их из разделенных строк. После того, как мы используем strjoin присоединиться все строки обратно:

%// Input string 
s = 'DA EA DA BD FA ED GE AA CA BB CC FB BC CB CF'; 

%// Split string up into cells based on spaces 
st = strsplit(s, ' '); 

%// Filter out duplicate strings 
st = unique(st, 'stable'); 

%// Find split strings that all have the same characters 
f = cellfun(@(x) all(diff(x) == 0), st); 

%// Remove from the list 
st2 = st(~f); 

%// Join the remaining strings back 
sf = strjoin(st2, ' '); 

sf является конечный результат. В этом случае мы получаем:

sf = 

DA EA BD FA ED GE CA FB BC CB CF 

Хорошая вещь о выше подхода состоит в том, что строки в между пространствами может быть любого размера - это не должно быть только два символа в строке.

1

это работает для меня.

Input= 'DA EA DA BD FA ED GE AA CA BB CC FB BC CB CF' 
foo = reshape([Input,' '], 3, 15)' 
foo(foo(:,1)==foo(:,2),:)='' 
bar = unique(foo,'rows','stable') 
reshape(bar', 1, numel(bar)) 
Смежные вопросы