2014-09-04 10 views
7

Ich versuche, eine Zeichenfolge in einem Vektor zu finden. Für zB: query = "ab" in vector = ["ab", "cd", "abc", "cab"]Suche eine bestimmte Zeichenfolge in einem Vektor (Octave)

Das Problem ist: Es gibt alle Indizes, die Zeichenfolge "ab" wann haben Ich benutze die Funktion strfind (Vektor, Abfrage). In diesem Fall "ab" einschließlich "abc" und "cab". Aber ich will nur den Index von "ab" nicht andere. Gibt es dafür eine spezielle Funktion in Octave?

Antwort

6

Das Problem liegt in Ihrer Syntax. Wenn Sie vector = ["ab", "cd", "abc", "cab"] tun, erstellen Sie keinen Vektor dieser mehreren Zeichenfolgen, Sie verketten sie in einer einzigen Zeichenfolge. Was sollten Sie tun, ist eine Zelle Array von Strings erstellen:

vector = {"ab", "cd", "abc", "cab"}; 

Und dann können Sie tun:

octave-cli-3.8.2> strcmp (vector, "ab") 
ans = 

    1 0 0 0 

Viele andere Funktionen arbeiten korrekt mit Zell Array von Strings, einschließlich strfind die in diesen Fällen gibt Ihnen die Indizes für jede Zelle, wo die Zeichenfolge "ab" Sterne:

octave-cli-3.8.2> strfind (vector, "ab") 
ans = 
{ 
    [1,1] = 1 
    [1,2] = [](0x0) 
    [1,3] = 1 
    [1,4] = 2 
} 
+0

ist das in Ordnung. Aber kannst du mir bitte sagen, wie man ein Element in diese Zelle einfügt. Gibt es eine eingebaute Funktion? – user3713665

+1

Auch wenn es mehrere Übereinstimmungen gibt oder Sie nach mehreren Strings suchen, schauen Sie sich die Funktion 'ismember' an. In Bezug auf das Anhängen an die Matrix können Sie dies tun: vector {end + 1} = 'new string'. Werfen Sie einen Blick auf [meine Antwort auf diese Frage] (http://stackoverflow.com/questions/25620636/how-to-use-cell-arrays-in-matlab/25621199#25621199) für weitere Details. – Dan