【问题标题】:MATLAB: "ismember" function for a nx1 CharMATLAB:nx1 Char 的“ismember”函数
【发布时间】:2021-01-24 13:05:15
【问题描述】:

美好的一天。

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

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

    %% 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 字符?

提前谢谢你。

【问题讨论】:

  • 更好用strfind

标签: matlab function char find


【解决方案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

【讨论】:

    猜你喜欢
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多