我有一个单元格,像这样 P = {Face1 Face6 Scene6 Both9 Face9 Scene11 Both12 Face15} 。我想计算P中有多少面值,场景值,两个值。我不关心字符串后的数值(即,Face1和Face23将被计为两个)。我已经尝试了以下(针对Face)但是我得到了错误"如果任何输入参数是单元格数组,则第一个必须是字符串的单元格数组,第二个必须是字符数组&# 34。
strToSearch='Face';
numel(strfind(P,strToSearch));
有没有人有任何建议?谢谢!
答案 0 :(得分:3)
使用regexp
查找以所需文字(例如^
)开头('Face'
)的字符串。结果将是一个单元格数组,如果匹配则每个单元格包含1
,否则为[]
。因此,确定每个单元格是否为非空(~cellfun('isempty', ...)
:将为非空单元格提供逻辑1
,为空单元格提供0
,并对结果(sum
)求和:
>> P = {'Face1' 'Face6' 'Scene6' 'Both9' 'Face9' 'Scene11' 'Both12' 'Face15'};
>> sum(~cellfun('isempty', regexp(P, '^Face')))
ans =
4
>> sum(~cellfun('isempty', regexp(P, '^Scene')))
ans =
2
答案 1 :(得分:0)
如果所有P都包含字符串,那么您的示例应该使用一些小的调整,但如果单元格数组中存在任何非字符串值,则可能会出现错误。
P= {'Face1' 'Face6' 'Scene6' 'Both9' 'Face9' 'Scene11' 'Both12' 'Face15'};
strToSearch='Face';
n = strfind(P,strToSearch);
numel([n{:}])
(返回4)