#Matlab# #本质分析# 使用多种方法 查找 元胞 (cell) 内指定字符串的索引 并分析局限性及陷阱

您所在的位置:网站首页 matlab查看字符串变量的存储内容 #Matlab# #本质分析# 使用多种方法 查找 元胞 (cell) 内指定字符串的索引 并分析局限性及陷阱

#Matlab# #本质分析# 使用多种方法 查找 元胞 (cell) 内指定字符串的索引 并分析局限性及陷阱

2024-07-09 10:05| 来源: 网络整理| 查看: 265

查找cell里边的字符串 常用的方法有三种。

方法一 >> C = {1,5,3,4,2,3,4,5,2,1}; index = find([C{:}] == 5) index = 2 8

方法一首先通过[C{:}]操作,将cell内的元素转化为数组,然后再对数组执行find()函数,返回要查找字符串的索引。

优点

能同时检索cell内数值类型和单字符型的数据

局限性

这种方法 只对数字(包括小数) 或单个char(单个字符) 有效。 如果对多个字符操作会出现如下错误:

>> c={'1' '5d' '3' '4' '2' '3' '4' '5' '2' '1'}; >> index = find([c{:}] == '5d') 错误使用 == 矩阵维度必须一致。 深入分析出现错误的原因(陷阱)

之所以会出现如下错误,关键在于[ ]操作。 我们先来了解一下[ ]操作在不同类型数据上的区别

对于多个数值类型的变量执行[ ]操作,本质上是将所有变量放入数组之中,系统返回的是一个数值型的数组; >> C = {1,5,3,4,2,3,4,5,2,1}; [C{:}] ans = 1 5 3 4 2 3 4 5 2 1 对于多个字符型的变量,执行[ ]操作本质上是执行了字符串拼接,返回的是一个char数组,每个数组单元内存储一个字符,长度为1 >> c={'1' '5d' '3' '4' '2' '3' '4' '5' '2' '1'}; [c{:}],class([c{:}]) ans = 15d34234521 ans = char

此外,经试验发现,find([c{:}] == ‘5d’)语句中右边的长度必须是左边数组的单位长度 所以回到最开始的问题,语句 find([c{:}] == ‘5d’) ,等号左边是1 * n的字符数组,右边是 1 * 2的字符数组,右边的长度2不等于左边的最小单位1,所以报错:错误使用 == 矩阵维度必须一致。

方法二 >> c={'1' '5d' '3' '4' '2' '3' '4' '5' '2' '1'}; index = find(strcmp(c,'5d')) index = 2 优点

strcmp()方法能够同时检索字符和字符串

局限性

strcmp()方法不能检索数值型的数据。

>> c={1,'5',3,4,2,3,4,5,2,1};index = find(strcmp(c,5)) index = 空矩阵: 1×0 方法三 >> c={'1' '5d' '3' '4' '2' '3' '4' '5' '2' '1'}; >index = find(ismember(c,'5d')) index = 2 优点

能够检索字符串和单字符

局限性

不能够检索数值类型的数据, 不能对包含混合数据类型(同时包含数值和字符或字符串)的cell进行检索。 速度较慢

>> c={1,'5d','5',4,2,3,4,5,2,1}; idx = find(ismember(c,'5')) 错误使用 cell/ismember (line 34) 类 cell 的输入 A 和类 char 的输入 B 必须为字符串元胞数组,除非其中某个输入为字符串。 总结

通过表格总结一下三种方法的适用范围

方法检索包含混合数据cell检索数值型检索单字符检索字符串方法一√√√×方法二√×√√方法三××√√


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3