2015-05-11 36 views
5

In Matlab, se ho un array di celle di stringhe, come posso controllare se per esempio la 3a riga e la 1a colonna è uguale ad una determinata stringa, ad esempio 'ABC'?Array di stringhe di celle - controllare gli elementi in Matlab

Per esempio, myArray(3,1) == 'ABC' mi dà un errore:

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

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

risposta

9

Questo perché è necessario utilizzare {parentesi graffe}, al fine di accedere ai contenuti della matrice di celle.

L'utilizzo di parentesi (normali parentesi) indica la cella effettiva, che nel tuo caso contiene una stringa. Inoltre, per verificare la presenza di stringhe, ti consiglio di utilizzare strcmp o forse strfind.

utilizzare Quindi questo:

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

Verifica here per informazioni circa indicizzazione in matrici di celle.

EDIT (commenti)

Utilizzando logica == al fine di trovare le stringhe in un array di celle non è sicuro, perché l'utilizzo di questo operatore divide le corde e si confronta ogni lettera che lo compongono, al contrario di strcmp e simili, che controlla l'intera stringa.

Considerate questo codice, in cui ho messo alcune stringhe in myArray:

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

myArray = 

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

Se applichiamo == su questo array di celle di stringhe come segue:

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

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

Matlab restituisce quei 2 vettori logici:

Check_31 = 

    1  1  1 


Check_41 = 

    1  1  0 

Così come vedi, il personaggio "_" non è l'ultimo elemento della stringa presente nella cella {4,1}.

Ora, se si usa la strcmp (su tutta la gamma delle cellule, non abbiamo bisogno di indicizzare cellule specifiche per verificare se una stringa è presente):

Check_ABC = strcmp(myArray,'ABC') 

abbiamo anche un vettore logica, ma questo tempo che non si riferisce alle 3 lettere che formano la stringa all'interno della cella, ma piuttosto che si riferisce alla matrice di celle stessa e se 'ABC' è presente o meno. Il risultato è questo:

Check_ABC = 

    0 
    0 
    1 
    0 
    1 

che ha un senso, dal momento che è effettivamente presente nelle cellule {3,1} e {5,1} 'ABC'.

Spero sia più chiaro!

+0

myArray {3,1} == 'ABC' funziona correttamente, ma se lo faccio in un ciclo, ad esempio myArray {i, 1} == 'ABC' (looping su i) non lo fa. Dice che le dimensioni della matrice devono essere d'accordo. Perché non funziona e perché dobbiamo usare strcmp qui? – user107986

+0

Che dire di strcmp (myArray {i, 1}, 'ABC')? – JaBe

+3

Con == testate ogni elemento dell'array di caratteri {i, 1} con tutti gli elementi dell'array di caratteri del lato destro 'ABC'. Per confrontare 'XYZ' == 'ABC' dà [0 0 0] ma 'XY' == 'ABC' dà l'errore, perché le dimensioni non sono d'accordo (2 non è uguale a 3). – JaBe

Problemi correlati