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 件のコメント

Jan
Jan 2012 年 3 月 13 日
FIND replies a vector of indices. Therefore "find()>0" is not working.

サインインしてコメントする。

 採用された回答

Jan
Jan 2012 年 3 月 13 日

1 投票

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

その他の回答 (2 件)

sworland
sworland 2015 年 12 月 3 日

36 投票

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 件のコメント

vettel liu
vettel liu 2017 年 9 月 28 日
Very helpful! Thank you so much.
Adam Thodey
Adam Thodey 2018 年 11 月 23 日
Fantastic. just what i was looking for!
Alex Lord
Alex Lord 2019 年 9 月 30 日
Fantastic! Was searching for ages
Shaul Shvimmer
Shaul Shvimmer 2020 年 6 月 9 日
Thanks
gao yang
gao yang 2020 年 10 月 15 日
Merci!!!!
dan
dan 2021 年 3 月 10 日
Perfect! Thanks.

サインインしてコメントする。

Geoff
Geoff 2012 年 3 月 13 日

1 投票

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 件のコメント

Jan
Jan 2012 年 3 月 13 日
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 2012 年 3 月 15 日
thank you!

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeMatrices and Arrays についてさらに検索

質問済み:

2012 年 3 月 13 日

コメント済み:

dan
2021 年 3 月 10 日

Community Treasure Hunt

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

Start Hunting!

Translated by