Testing for a string in a cell array in a structure

I want to find the matches to a string in a cell array of strings which is part of a structure.
Strcmp works when I give it the cell array, but not when I use the structure.
>> CellArray = { 'one' 'two' 'three' 'one' };
>> S = struct( 'CA', CellArray );
>> strcmp( CellArray, 'one' )
ans =
1×4 logical array
1 0 0 1
>> strcmp( S.CA, 'one' )
Error using strcmp
Too many input arguments.
>>
What am I doing wrong?
I don't have to use a structure - I just use it as a way of returing lots of variables from a function.

 Accepted Answer

Enclose cell array arguments in the call to struct() with {} to make them scalar cell arrays, because struct() will create an array of structs for cell array inputs, one per element of the cell array given.
CellArray = { 'one' 'two' 'three' 'one' };
S = struct( 'CA', CellArray ) % 1-by-4 struct array
S = 1×4 struct array with fields:
CA
S = struct( 'CA', {CellArray} ) % scalar struct
S = struct with fields:
CA: {'one' 'two' 'three' 'one'}
strcmp( CellArray, 'one' )
ans = 1×4 logical array
1 0 0 1
strcmp( S.CA, 'one' )
ans = 1×4 logical array
1 0 0 1

2 Comments

Many thanks. Cell arrays are my Kryptonite!
You're welcome! If it's working now, do you mind marking the answer as 'Accepted'? I appreciate it!
Honestly, the behavior of struct() you ran into here - where passing a cell array to the struct() function creates an array of structs rather than a scalar struct with a cell array field - is one thing that bugs me about MATLAB (and there aren't very many things that bug me about MATLAB).

Sign in to comment.

More Answers (0)

Categories

Products

Release

R2021b

Asked:

on 18 Mar 2022

Commented:

on 22 Mar 2022

Community Treasure Hunt

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

Start Hunting!