#matlab #function #char #find
#matlab #функция #символ #Найти
Вопрос:
Добрый день.
Я пытаюсь найти пробелы в предложении, используя функцию «ismember» для символа nx1.
Здесь у меня есть рабочий пример для символа 1×1:
%% Working example
StringSearchedSpaces = ' ' ; %White spaces
String1 = "Random info - at beginning-man. " ...
"Random info still continues. ";
Char1 = convertStringsToChars(String1);
String1Spaceidx = ismember(Char1, StringSearchedSpaces);
Обратите внимание, что это возвращает «0», если символ не является «пробелом», и «1», если это «пробел». Теперь я хотел бы применить ту же логику для символа nx1, см. Мою попытку:
%% Not Working example
String2 = ["Random info in middle one, " ...
"Random info still continues. ",
"Random info in middle two. " ...
"Random info still continues. "];
Char2 = convertStringsToChars(String2);
%PlanA
PlanAString1Spaceidx = ismember(Char2, StringSearchedSpaces);
%PlanB
for z=1:length(Char2)
PlanBString2Spaceidx(z,:) = ismember(Char2(z,:), StringSearchedSpaces);
end
Оба плана по какой-то причине не возвращают значения «0» и «1», которые указывают расположение «пробелов». Но возвращает только «0»?
Что я могу сделать, чтобы получить правильный ответ и в том же формате, что и «Рабочий пример» (с использованием символа 1×1), но теперь для символа nx1?
Заранее благодарю вас.
Комментарии:
1. гораздо лучше использовать
strfind
Ответ №1:
В вашем случае convertStringsToChars
будет возвращен cell
массив. Вам ismember
нужно будет применить функцию к каждой ячейке в массиве, например, с помощью cellfun
:
space_idx_char2 = cellfun(@(s) ismember(s, StringSearchedSpaces),Char2, 'UniformOutput', false)
В качестве альтернативы вы можете использовать цикл for, но вам придется немного изменить скобки:
PlanBString2Spaceidx = cell(size(Char2)); % initialize empty cell array
for z=1:length(Char2)
PlanBString2Spaceidx{z,:} = ismember(Char2{z,:}, StringSearchedSpaces);
end