find a string element in a structure matrix

assume i have a matrix t =
'abc'
'defg'
'hi'
i want to check if 'abc' is in the matrix t
however this code doesnt seem to work
if (find(t == 'abc') >0)
i get the following error message Undefined function or method 'eq' for input arguments of type 'cell'.

1 Kommentar

Jan
Jan am 13 Mär. 2012
FIND replies a vector of indices. Therefore "find()>0" is not working.

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Jan
Jan am 13 Mär. 2012

1 Stimme

The shown data cannot be a matrix, because a matrix must have a rectangular shape. I assume you mean a cell string:
C = {'abc', 'defg', 'hi'};
Then:
if any(strcmp(C, 'abc'))
disp('abc found');
end

Weitere Antworten (2)

sworland
sworland am 3 Dez. 2015

36 Stimmen

I realize that the answer for this was accepted, but the question did say in a "structure matrix", which I interpreted to mean a structure array. For that the following will find the index of the first occurrence,
index = find(strcmp({structname.field}, 'string')==1)

6 Kommentare

vettel liu
vettel liu am 28 Sep. 2017
Very helpful! Thank you so much.
Adam Thodey
Adam Thodey am 23 Nov. 2018
Fantastic. just what i was looking for!
Alex Lord
Alex Lord am 30 Sep. 2019
Fantastic! Was searching for ages
Shaul Shvimmer
Shaul Shvimmer am 9 Jun. 2020
Thanks
gao yang
gao yang am 15 Okt. 2020
Merci!!!!
dan
dan am 10 Mär. 2021
Perfect! Thanks.

Melden Sie sich an, um zu kommentieren.

Geoff
Geoff am 13 Mär. 2012

1 Stimme

Direct comparison operators (==, etc) don't work with strings.
You need to use strcmp or strcmpi (which ignores case).
Because that function doesn't work on an array, you need to map it:
isabc = cellfun( @(x) strcmp(x,'abc'), t );
This will give you an array of booleans. If you don't care what index the 'abc' occurred at, but just that it exists, you then do this:
if any(isabc)
% etc
end
To obtain the index of the first occurrence, use this:
firstabc = find( isabc, 1 );
-g-

2 Kommentare

Jan
Jan am 13 Mär. 2012
The == operator does work with strings, try:
a = 'abc', b = '12c', a==b, a=='b';
The only limitation is that both arguments must have the same size or one must be a scalar.
STRCMPI does accept cell strings as inputs such that the CELLFUN approach is not needed.
eliza
eliza am 15 Mär. 2012
thank you!

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Matrices and Arrays finden Sie in Hilfe-Center und File Exchange

Gefragt:

am 13 Mär. 2012

Kommentiert:

dan
am 10 Mär. 2021

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by