2015-05-11 68 views
5

元件在Matlab中,如果我有字符串的單元陣列,如何可以檢查是否例如第三行和第一列等於某個給定的字符串,例如'ABC'細胞字符串數組 - 檢查在Matlab

例如,myArray(3,1) == 'ABC'給我一個錯誤:

Undefined operator '==' for input arguments of type 'cell'.

Error in cw14 (line 19)
if myArray(3,1) == 'ABC'

回答

9

那是因爲你需要使用{大括號}爲了訪問單元陣列的內容

使用(正方括號)索引實際的單元格,在您的情況下,它包含一個字符串。此外,爲了檢查是否存在字符串,我推薦使用strcmpstrfind

因此使用此:

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

檢查here的相關信息有關索引爲單元格陣列。

編輯(以下評論)

爲了使用邏輯==找到字符串成一個單元陣列是不是安全的,因爲使用此運算拆分字符串,每個字母形成它進行比較,而不是strcmp和類似的東西,檢查整個字符串。如果我們的字符串這個單元陣列上應用==

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

myArray = 

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

如下:

考慮以下代碼,在這裏我把一些字符串到myArray

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}確實存在。

希望這是更清晰!

+0

myArray的{3,1} ==「ABC」工作正常,但如果我做一個循環,例如myArray的{1,1} ==「ABC」(遍歷我)沒有。它說矩陣尺寸必須一致。爲什麼它不起作用,爲什麼我們必須在這裏使用strcmp? – user107986

+0

strcmp(myArray {i,1},'ABC')呢? – JaBe

+3

用==測試字符數組{i,1}的每個元素與右側字符數組'ABC'的所有元素。比較'XYZ'=='ABC'給出[0 0 0]但'XY'=='ABC'給出錯誤,因爲尺寸不一致(2與3不同)。 – JaBe