find a string in a character array

244 Ansichten (letzte 30 Tage)
Edward Umpfenbach
Edward Umpfenbach am 13 Sep. 2012
Kommentiert: Stephen23 am 29 Jan. 2019
A is an m x n character array (I think that is the right term. It says m x n char in the workspace under value).
I want to find a certain row depending on the characters. So say I have a string s of size 1 x n. I want something like this:
find(strcmp(s,A(1:m,:)))
I messed around with ismember instead of strcmp a little too. Can't get it right. I only want it to return an indicator if the row matches the string s.
help is appreciated. Thanks.

Akzeptierte Antwort

Matt Fig
Matt Fig am 13 Sep. 2012
Bearbeitet: Matt Fig am 13 Sep. 2012
A = ['asdf';'lelr';'wkre';'pope']
idx = all(ismember(A,'lelr'),2)
Now if you need linear indices rather than a logical index, use:
lidx = find(idx)
  1 Kommentar
Jonathan
Jonathan am 29 Jan. 2019
This solution will match all strings that contain any of the characters in the string, not unique matches. See my answer below for an example and a soluton to fix this issue.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Jonathan
Jonathan am 29 Jan. 2019
The answer by Loginatorist was incorrect for my problem that is I believe the same as described by the OP. Below is an example of when the solution gives wrong results:
Occupations = ['educator ';'doctor '];
all(ismember(Occupations,'doctor '),2)
all(ismember(Occupations,'educator '),2)
Output:
ans =
5×1 logical array
0
1
ans =
5×1 logical array
1
1
Clearly, the second match is wrong, as doctor contains all the characters contained within educator.
A solution that fixes this is to use cellstr and strcomp:
OccupationsCell = cellstr(Occupations);
strcmp('doctor',OccupationsCell)
strcmp('educator',OccupationsCell)
Output:
ans =
2×1 logical array
0
1
ans =
2×1 logical array
1
0
  1 Kommentar
Stephen23
Stephen23 am 29 Jan. 2019
Other options: use the 'rows' option:
>> Occupations = ['educator ';'doctor '];
>> ismember(Occupations,'doctor ','rows')
ans =
0
1
Use a cell array:
>> ismember(cellstr(Occupations),'doctor')
ans =
0
1

Melden Sie sich an, um zu kommentieren.


Edward Umpfenbach
Edward Umpfenbach am 13 Sep. 2012
Great. Thanks.
Was just missing the "all" part.

Kategorien

Mehr zu Characters and Strings finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by