首页 > 解决方案 > MATLAB:nx1 Char 的“ismember”函数

问题描述

再会。

我正在尝试使用 nx1 Char 的“ismember”函数在句子中查找空格。

这里我有一个 1x1 Char 的工作示例:

    %% 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 Char 应用相同的逻辑,请参阅我的尝试:

%% 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”?

我该怎么做才能正确接收答案,并采用与“工作示例”相同的格式(使用 1x1 字符),但现在使用 nx1 字符?

先感谢您。

标签: matlabfunctioncharfind

解决方案


在您的情况下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

推荐阅读