matlab中字符串匹配函数

MATLAB字符串匹配函数中,应用较多的有:findstr、strfind、strmatch、strcmp、strmcmp。这里我们大致列举这些函数的区别与联系

在Matlab中,这几个函数区分如下:
(以下默认S1和S2是字符串,同样也适用于cell细胞类型数据,也就是循环对cell中每个元素分别判断即可。)
findstr(S1,S2):寻找是否有S1和S2之间的匹配,真返回1,假返回0,双向;
例:
s = 'How much wood would a woodchuck chuck?';

findstr(s,'a') returns 21

findstr('a',s) returns 21

findstr(s,'wood') returns [10 23]

findstr(s,'Wood') returns []

findstr(s,' ') returns [4 9 14 20 22 32]

strfind(S1,S2):寻找S2是否匹配S1,和上面的唯一区别就是这个是单向的。请注意唯一的区别在例子中红字部分。
例:
s = 'How much wood would a woodchuck chuck?';

strfind(s,'a') returns 21

strfind('a',s) returns []

strfind(s,'wood') returns [10 23]

strfind(s,'Wood') returns []

strfind(s,' ') returns [4 9 14 20 22 32]

strcmp(S1,S2):寻找S1和S2是否完全匹配,S1和S2没有顺序的区分。
例:
s= 'wooden';

strcmp(s,'wood') returns 0

strcmp(s,'wooden') returns 1

strcmp('wooden',s) returns 1

strcnmp(S1,S2,n):寻找S1和S2的前n个字符
是否完全匹配,S1和S2没有顺序的区分。
例:
s= 'wooden';

strncmp(s,'wood',4) returns 1

strncmp(s,'wood',5) returns 0

strncmp(s,'wooden',4) returns 1

strncmp('wooden',s,4) returns 1

strcmpi(S1,S2)与strncmpi(S1,S2,n)与上面分别对应的strcmp(S1,S2)与strncmp(S1,S2,n)完全相同,唯一的区分是匹配时不区分大小写。

最重要的:

strmatch(S1,S2):寻找S1是否匹配S2的开头部分,返回值是S1在S2中匹配的位置。

strmatch(S1,S2,'exact'):
寻找S1是否和S2完全匹配,返回值是S1在S2中匹配的位置。
例:
S2=strvcat('max','minimax','maximum')

S2 =

max

minimax

maximum

strmatch('max',S2) returns [1; 3] 表明1和3列匹配

strmatch('max',S2,'exact') returns [1] 表明1列完全匹配

strmatch的一个好处是可以返回匹配的位置,而其余几个函数都只能返回判断值。


但是,strmatch在2011b之后的版本将被删除不再使用。根据个人推测的原因和网上求证如下:
1、strmatch的功能完全可以由以上的几个函数实现。
2、strmatch是一个M文件,而其余几个函数都是内置的函数,因此在执行时,可以预测到strcmp的效率是远远高于strmatch的。
3、另一个因素,strmatch要先创建一个矩阵来储存返回的真值的位置,且在循环的过程中这个矩阵在不断变化;而strcmp仅仅返回真假。因此推测效率更高。
以上仅为推测,我没有做过测试。因此对于小程序来说,这点时间效率的对比实在不会太重要。总之,还是选择自己适合的函数就可以了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 86.复合 Cases 共享相同代码块的多个switch 分支 分支可以合并, 写在分支后用逗号分开。如果任何模式...
    无沣阅读 1,449评论 1 5
  • 本文转自:http://www.cnblogs.com/lidabo/p/5225868.html 1)字符串操作...
    XiaohuiLI阅读 9,564评论 0 0
  • 一、字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 s...
    JaiUnChat阅读 1,676评论 0 7
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,780评论 18 399
  • 嗨!对面的女孩看过了,看过来,看过了,这边有一个大帅哥。(扑街)是大哀哥好不!――剧情有点复杂。 其实是我上课时...
    碎月溺花阅读 272评论 0 2