我必须创建一个带有两个输入的函数:一个字符串的单元格数组(让我们称之为txt
)和一个字符串(让我们称之为str
)。该函数必须删除其字符串与txt
相同或包含str
作为子字符串的单元格向量str
的每个元素。
目前我尝试过以下内容:
function c = censor( txt,str )
c = txt;
n = length(c);
for i = 1:n
a = c{ i };
a( a == str ) = [];
c{i} = a;
end
end
但它不起作用,它会给出错误Matrix dimensions must agree.
我理解可能是因为str
有多个角色,但我不知道怎么做查找单元格数组str
的任何字符串中是否包含txt
。
答案 0 :(得分:3)
正如Anders所指出的,您希望使用strfind
在其他字符串中查找字符串。这是一种可以编写函数的方法。基本上在整个strfind
单元格数组上应用txt
,然后删除匹配的条目。
代码:
function censor(txt,str)
clc
clear
%// If no input are supplied..demo
if nargin ==0
str = 'hello';
txt = {'hellothere' 'matlab' 'helloyou' 'who are you' 'hello world'};
end
IsItThere = strfind(txt,str)
现在IsItThere
是一个包含1和1个空单元格的单元格数组:
IsItThere =
[1] [] [1] [] [1]
让我们用0填充空单元格,这样我们就可以在以后执行逻辑索引:
IsItThere(cellfun('isempty',IsItThere))={0}
找出匹配发生的指数:
IndicesToRemove = find(cell2mat(IsItThere))
IndicesToRemove =
1 3 5
删除细胞:
txt(IndicesToRemove) = [];
txt
现在看起来像这样:
txt =
'matlab' 'who are you'
end
如果您愿意,可以将几个步骤组合在一起,但我希望这很清楚:)
以下是您可以在.m文件中复制/粘贴的完整代码:
function censor(txt,str)
clc
clear
%// If no input are supplied..demo
if nargin ==0
str = 'hello';
txt = {'hellothere' 'matlab' 'helloyou' 'who are you' 'hello world'};
end
IsItThere = strfind(txt,str)
IsItThere(cellfun('isempty',IsItThere))={0}
IndicesToRemove = find(cell2mat(IsItThere))
txt(IndicesToRemove) = [];
txt
end