字符串的单元格数组 - 在Matlab中检查元素

时间:2015-05-11 10:09:12

标签: arrays matlab cell

在Matlab中,如果我有一个字符串的单元格数组,我该如何检查例如第3行和第1列是否等于某个给定的字符串,例如'ABC'

例如,myArray(3,1) == 'ABC'给了我一个错误:

  

未定义的运算符'=='表示'cell'类型的输入参数。

     

cw14错误(第19行)
      如果myArray(3,1)=='ABC'

1 个答案:

答案 0 :(得分:9)

那是因为您需要使用{花括号}才能访问单元格数组的内容

使用(常规括号)索引实际的单元格,在您的情况下包含一个字符串。此外,为了检查字符串的存在,我建议使用strcmpstrfind

因此请使用:

strcmp(myArray{3,1},'ABC')

检查here是否有关于索引到单元格数组的信息。

编辑(以下评论)

使用逻辑==来查找字符串到单元格数组是不安全的,因为使用此运算符会拆分字符串并比较形成它的每个字母,而不是strcmp等等,检查整个字符串。

考虑这段代码,我将一些字符串放入myArray

myArray = {'A' 'B' 'ABC' 'CBA' 'ABC'}.'

myArray = 

    'A'
    'B'
    'ABC'
    'CBA'
    'ABC'

如果我们对字符串的单元格数组应用==,如下所示:

Check_31 = myArray{3,1} == 'ABC'

Check_41 = myArray{4,1} == 'CB_'

Matlab返回这2个逻辑向量:

Check_31 =

     1     1     1


Check_41 =

     1     1     0

如您所见,字符“_”不是单元格{4,1}中存在的字符串的最后一个元素。

现在,如果我们使用strcmp(在整个单元格数组上;我们不需要索引特定的单元格来检查是否存在某些字符串):

Check_ABC = strcmp(myArray,'ABC')

我们也得到一个逻辑向量,但这次不是指在单元格内形成字符串的3个字母,而是指单元格数组本身以及是否存在“ABC”。结果如下:

Check_ABC =

     0
     0
     1
     0
     1

这是有道理的,因为'ABC'确实存在于单元格{3,1}和{5,1}中。

希望更清楚!