matlab 查找字符串数组,Matlab之字符串数组查找

Matlab的优势在于向量操作,字符串操作往往费时费力,但是如果能充分利用Matlab自带的一些函数,也可以取得不错的效果。下面就介绍一下字符串数组查找的小技巧。

字符串数组我通常会选择应用cell格式保存,下面的分析也是建立在这个前提下。

【1】 strcmp() 函数

strcmp() 函数的基本功能是比较两个字符串是否相等,其基本用法是:TF = strcmp(s1,s2);

但是,如果我们要查找字符串数组中等于某字符串的索引时,该如果操作?strcmp() 函数也提供了这个功能,用法相同:

TF = strcmp(s1,s2);

其中,s1是字符串数组,s2是字符串,返回值为逻辑类型,大小与字符串数组s1相同;

【2】 strfind() 函数

strcmp() 函数比较的是两个字符串是否相等。但是如果想查找字符串数组中包含某字符串的记录时,我们就可以选择strfind() 函数。

k = strfind(str,pattern);

输出结果k表示pattern在str中出现的位置,若不出现,则返回[]。比如:

S = ‘Find the starting indices of the pattern string’;

k = strfind(S, ‘in’)

k =

2    15    19    45

上面是strfind() 函数的基本功能,但是如果查找字符串数组中包含某字符串的索引时,strfind() 函数也可以大显身手,返回和字符串数组相同大小的cell类型数据,每个cell为字符串出现位置,向量类型,比如:

cstr = {‘How much wood would a woodchuck’; ‘if a woodchuck could chuck wood?’};

idx = strfind(cstr, ‘wood’)

idx =

[1*2 double]

[1*2 double]

Idx{:,:}

ans =

10    23

ans =

6    28

【3】 一个问题:

有一个字符串数组cstr1,要找到包含字符串str2的索引,该如果操作?

一个直接的答案是:

idx = strfind(cstr1,str2);

finger(length(idx),1) = 1==0;

for i = 1:length(idx)

if ~isempty(idx(i))

finger(i) = 1==1;

end

end

思路是正确的,但是代码量有点大,需要7行,而且速度较慢。其实要实现这个功能,1行代码足矣。如下:

finger = ~cellfun(@isempty, strfind(cstr1,str2));

上面的代码还有另外一种写法,

finger = cellfun(@(x) ~isempty(strfind(x,str2)), cstr1);

三种方法输出结果是一样的,但是第2种方法速度最快,第1种方法次之,第3种方法最慢。大家可以进行测试下。

  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值