Finding the indexes of multiple substrings within a larger string.
Ältere Kommentare anzeigen
I’m trying to find the indexes of all two digit pairs in a very long string of numbers, say “c”. I can easily find all occurrences of one string at a time; for example strfind(c, ’00’)…strfind (c, ’01’). But I want a way to do this for all sets one hundred sets; 00 to 99. I tried this:
x=0:99;
dig=sprintf('%02d ',x);
%converts the vector 0to99 into a string with two digits, space between numbers
dub_dig=strsplit(dig);
%splits each pair into cells
dub_dig_str=string(dub_dig);
%converts to a string
How do I get this sequence of strings (dub_dig_str) to work in something like a for loop using the strfind function? When I try this it crashes. I would like to output a matrix of indexes of where each pair occurs, for all pairs.
Thanks
Akzeptierte Antwort
Weitere Antworten (1)
c = 'a91bb48353'
mask = ismember(c, '0':'9');
odd_pair = find(mask(1:2:end-1) & mask(2:2:end)) * 2 - 1
even_pair = find(mask(2:2:end-1) & mask(3:2:end)) * 2
pair_starts_at = union(odd_pair, even_pair)
2 Kommentare
c = char(randi([0 9], 1, 30) + '0')
C = c - '0';
odds = C(1:2:end-1) * 10 + C(2:2:end);
evens = C(2:2:end-1) * 10 + C(3:2:end);
odd_idx = (1:numel(odds)) * 2 - 1;
even_idx = (1:numel(evens)) * 2;
indices = accumarray([odds(:); evens(:)] + 1, [odd_idx(:); even_idx(:)], [], @(locs){locs});
populated = find(~cellfun(@isempty, indices));
[num2cell(populated-1), indices(populated)]
Steve
am 1 Apr. 2023
Kategorien
Mehr zu Characters and Strings finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!