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

use*_*986 5 arrays matlab cell

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

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

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


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

Ben*_*_11 10

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

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

因此使用此:

strcmp(myArray{3,1},'ABC')
Run Code Online (Sandbox Code Playgroud)

在此处查看有关索引到单元格数组的信息.

编辑(以下评论)

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

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

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

myArray = 

    'A'
    'B'
    'ABC'
    'CBA'
    'ABC'
Run Code Online (Sandbox Code Playgroud)

如果我们==在这个字符串数组上应用 如下:

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

Check_41 = myArray{4,1} == 'CB_'
Run Code Online (Sandbox Code Playgroud)

Matlab返回这2个逻辑向量:

Check_31 =

     1     1     1


Check_41 =

     1     1     0
Run Code Online (Sandbox Code Playgroud)

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

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

Check_ABC = strcmp(myArray,'ABC')
Run Code Online (Sandbox Code Playgroud)

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

Check_ABC =

     0
     0
     1
     0
     1
Run Code Online (Sandbox Code Playgroud)

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

希望更清楚!

  • 使用==,您可以使用右侧字符数组'ABC'的所有元素测试字符数组{i,1}的每个元素.比较'XYZ'=='ABC'给出[0 0 0]但是'XY'=='ABC'给出错误,因为尺寸不一致(2与3不同). (3认同)