Matlab 之 字符串数组查找
2024-10-10 01:33:32
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 =
上面是strfind() 函数的基本功能,但是如果查找字符串数组中包含某字符串的索引时,strfind() 函数也可以大显身手,返回和字符串数组相同大小的cell类型数据,每个cell为字符串出现位置,向量类型,比如:
cstr = {‘How much wood would a woodchuck’; ‘if a woodchuck could chuck wood?’};
idx = strfind(cstr, ‘wood’)
idx =
[* double]
[* double]
Idx{:,:}
ans = ans =
【3】 一个问题:有一个字符串数组cstr1,要找到包含字符串str2的索引,该如果操作?
一个直接的答案是:
idx = strfind(cstr1,str2);
finger(length(idx),) = ==;
for i = :length(idx)
if ~isempty(idx(i))
finger(i) = ==;
end
end
思路是正确的,但是代码量有点大,需要7行,而且速度较慢。其实要实现这个功能,1行代码足矣。如下:
finger = ~cellfun(@isempty, strfind(cstr1,str2));
上面的代码还有另外一种写法,
finger = cellfun(@(x) ~isempty(strfind(x,str2)), cstr1);
三种方法输出结果是一样的,但是第2种方法速度最快,第1种方法次之,第3种方法最慢。大家可以进行测试下。
最新文章
- jQuery extend方法使用及实现
- 网站部署后Parser Error Message: Could not load type 的解决方案
- 低功耗蓝牙4.0BLE编程-nrf51822开发(10)-描述符
- LeetCode222 Count Complete Tree Nodes
- Miller_Rabin (米勒-拉宾) 素性测试
- 深入浅出C++引用(Reference)类型
- PHP获取当前文件路径信息的方法
- linux之SQL语句简明教程---SUBSTRING
- java动态加载配置文件
- nginx在CentOs下的安装及配置
- C#高级编程学习一-----------------第五章泛型
- awk之NR==FNR问题
- 隱藏在素數規律中的Pi -- BZOJ1041解題報告
- 【SQL跟踪工具】SQL Profiler 跟踪器
- BootStrap学习(5)_多媒体对象&;列表组
- centos Install Mrtg
- MySQL SELECT练习题*28
- Bootstrap3基础 container 浏览器宽度与容器宽度的四种配合
- Git冲突与解决方法【转】
- learning ddr pagesize calculate