在Matlab中,如果我有一个字符串的单元格数组,我该如何检查例如第3行和第1列是否等于某个给定的字符串,例如'ABC'
?
例如,myArray(3,1) == 'ABC'
给了我一个错误:
未定义的运算符'=='表示'cell'类型的输入参数。
cw14错误(第19行)
如果myArray(3,1)=='ABC'
答案 0 :(得分:9)
那是因为您需要使用{花括号}才能访问单元格数组的内容。
使用(常规括号)索引实际的单元格,在您的情况下包含一个字符串。此外,为了检查字符串的存在,我建议使用strcmp或strfind。
因此请使用:
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}中。
希望更清楚!