2015-05-11 5 views
5

In Matlab, wenn ich eine Zelle Array von Strings, wie kann ich überprüfen, ob beispielsweise der 3. Zeile und 1. Spalte ist gleich einem bestimmten Zeichenfolge, zum Beispiel 'ABC'?Zell Array von Strings - Kontrollelemente in Matlab

Zum Beispiel gibt myArray(3,1) == 'ABC' mir einen Fehler:

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

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

Antwort

9

Das ist, weil Sie verwenden müssen {geschweiften Klammern}, um den Inhalt zuzugreifen des Zellenfeldes.

Mit (regulären Klammern) indiziert die tatsächliche Zelle, die in Ihrem Fall eine Zeichenfolge enthält. Um das Vorhandensein von Strings zu überprüfen, empfehle ich außerdem, strcmp oder vielleicht strfind zu verwenden.

Daher verwenden:

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

prüfen here für Infos über die Indizierung in Zellenanordnungen.

EDIT (folgende Kommentare)

Verwendung logischer ==, um Strings in einem Zellenfeld zu finden, ist nicht sicher, da mit diesem Betreiber die Saiten teilt und vergleicht jeden Buchstaben sie bilden, im Gegensatz zu strcmp und die Likes, die die ganze Zeichenfolge überprüft.

Betrachten Sie diesen Code, wo ich einige Saiten setzen in myArray:

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

myArray = 

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

Wenn wir == auf dieser Zelle Array von Strings gelten wie folgt:

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

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

Matlab diese zwei logische Vektoren zurückgibt:

Check_31 = 

    1  1  1 


Check_41 = 

    1  1  0 

So wie Sie sehen, das Zeichen "_" ist nicht das letzte Element der Zeichenfolge in der Zelle {4,1}.

Wenn wir nun verwenden strcmp (auf der ganzen Zellenanordnung, wir brauchen keine spezifischen Zellen zu indizieren zu prüfen, ob einige String vorhanden ist):

Check_ABC = strcmp(myArray,'ABC') 

Wir auch eine logische Vektor erhalten, aber diese Zeit, die sich nicht auf die 3 Buchstaben bezieht, die den String innerhalb der Zelle bilden, sondern sich auf das Zellenfeld selbst beziehen und ob "ABC" vorhanden ist oder nicht. Das Ergebnis ist dies:

Check_ABC = 

    0 
    0 
    1 
    0 
    1 

was Sinn macht, da 'ABC' in der Tat in Zellen vorhanden ist {3,1} und {5,1}.

Hoffnung, die klarer ist!

+0

myArray {3,1} == 'ABC' funktioniert gut, aber wenn ich es in einer Schleife zu tun, zum Beispiel myArray {i, 1} == 'ABC' (Looping über i) nicht. Es besagt, dass die Matrix-Dimensionen übereinstimmen müssen. Warum funktioniert das nicht und warum müssen wir hier strcmp benutzen? – user107986

+0

Was ist mit strcmp (myArray {i, 1}, 'ABC')? – JaBe

+3

Mit == testen Sie jedes Element des Zeichenarrays {i, 1} mit allen Elementen des rechten Zeichenarrays 'ABC'. Zum Vergleichen von 'XYZ' == 'ABC' gibt [0 0 0] aber 'XY' == 'ABC' gibt den Fehler, weil die Dimensionen nicht übereinstimmen (2 nicht gleich 3). – JaBe