Respostas:
Acho que o código a seguir pode resolver o problema:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ind=find(ismember(strs,'KU'))
Isso retorna
ans =
2
>> strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
>> tic; ind=find(ismember(strs,'KU')); toc
O tempo decorrido é 0,001976 segundos.
>> tic; find(strcmp('KU', strs)); toc
O tempo decorrido é 0,000014 segundos.
ASSIM, claramente strcmp('KU', strs)
leva muito menos tempo do queismember(strs,'KU')
Desde 2011a, a forma recomendada é:
booleanIndex = strcmp('KU', strs)
Se você quiser obter o índice inteiro (que geralmente não precisa), pode usar:
integerIndex = find(booleanIndex);
strfind
está obsoleto, então tente não usá-lo.
Vejo que todos não perceberam a falha mais importante em seu código:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
deveria estar:
strs = {'HA' 'KU' 'NA' 'MA' 'TATA'}
ou
strs = {'HAKUNA' 'MATATA'}
Agora, se você continuar usando
ind=find(ismember(strs,'KU'))
Você não terá que se preocupar :).
Outras respostas são provavelmente mais simples para este caso, mas para completar, pensei em adicionar o uso de cellfun com uma função anônima
indices = find(cellfun(@(x) strcmp(x,'KU'), strs))
que tem a vantagem de que você pode facilmente torná-lo insensível a maiúsculas e minúsculas ou usá-lo nos casos em que você tem uma matriz de células de estruturas:
indices = find(cellfun(@(x) strcmpi(x.stringfield,'KU'), strs))
Código mais curto:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
[~,ind]=ismember('KU', strs)
Mas ele retorna apenas a primeira posição em strs
. Se o elemento não for encontrado, então ind=0
.
As funções strcmp e strcmpi são a maneira mais direta de fazer isso. Eles procuram por matrizes.
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ix = find(strcmp(strs, 'KU'))
você tentou
indices = Find(strs, 'KU')
veja o link
alternativamente,
indices = strfind(strs, 'KU');
também deve funcionar se não me engano.