2014-09-04 59 views
7

Sto cercando di trovare una stringa in un vettore. Per esempio: query = "ab" in vector = ["ab", "cd", "abc", "cab"]Cerca una stringa particolare in un vettore (Ottava)

Il problema è: sta dando tutti gli indici che hanno la stringa "ab" quando Io uso la funzione strfind (vector, query). In questo caso "ab" includendo "abc" e "cab". Ma voglio solo l'indice di "ab" non altri. Esiste una funzione specifica per questo in Octave?

risposta

6

Il problema è nella sintassi. Quando fai vector = ["ab", "cd", "abc", "cab"], non stai creando un vettore di quelle stringhe multiple, le stai concatenando in una singola stringa. Che cosa si dovrebbe fare è di creare un array di celle di stringhe:

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

E poi si può fare:

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

    1 0 0 0 

Molte altre funzioni funzioneranno correttamente con array di celle di stringhe, tra cui strfind che, in questi casi ti dà gli indici su ogni cella in cui la stringa "ab" stelle:

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

questo va bene. Ma puoi dirmi come aggiungere un elemento in questa cella. C'è qualche funzione in-built? – user3713665

+1

Anche se ci sono più corrispondenze o stai cercando stringhe multiple date un'occhiata alla funzione 'ismember'. Per quanto riguarda l'accodamento alla matrice, puoi farlo: vector {end + 1} = 'new string'. Dai un'occhiata a [la mia risposta a questa domanda] (http://stackoverflow.com/questions/25620636/how-to-use-cell-arrays-in-matlab/25621199#25621199) per maggiori dettagli. – Dan