删除字符串中的对(Matlab)

时间:2015-07-30 03:10:42

标签: string matlab

 Input= 'DA EA DA BD FA ED GE AA CA BB CC FB BC CB CF'

如何删除上述输入中的重复对并删除具有相同字符的对?在这种情况下,应该删除的对是:第二个'DA','AA','BB','CC'。

预期输出应为:

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

2 个答案:

答案 0 :(得分:2)

使用strsplit分隔字符串,使用空格字符作为分隔符,然后使用带有'stable'标记的unique以确保删除重复项并确保唯一字符串在相同的订单。这将删除重复的字符串,但不会删除所有包含相同字符的字符串。为此,我们循环遍历每个字符串并检查连续字符之间的差异是否都等于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 :(得分: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))