Ismember,多次

时间:2015-11-05 12:46:09

标签: matlab

我有一系列字母

mystring = 'abcdefghijklmnopqrstuvwxyz';

我有Elephant这个词。我想知道这些字母出现在Elephant中的次数。我试过了ismember它给了我它们是否出现但不是多少次。如何获得单词中出现字母的次数?

2 个答案:

答案 0 :(得分:3)

您可以使用histcounts

mystring = 'bcdfgijkmoqrsuvwxyzelphant';
myword = 'elephant';

[sortstring, idx] = sort(mystring); % Bin edges for histcounts need to be increasing

N = histcounts(double(myword), [double(sortstring) 257]); % Add 257 to the array so we capture the last character in a bin
N(idx) = N; % Undo the sort

返回:

N =

     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     2     1     1     1     1     1     1

请注意,由于转换为ASCII,此方法区分大小写。如有必要,您可以使用lowerupper进行相应调整。

答案 1 :(得分:1)

mystring = char(['A':'Z','a':'z']);
Alphabet = zeros(numel(mystring),1);
for ii = 1:numel(mystring)
    Alphabet(ii,1) = sum(ismember('Elephant',mystring(ii)));
end

ismember检查循环所指示的当前字母是否存在于单词中。如果是,则将所有出现次数相加以获得存储在Alphabet中的每个字母的总出现次数,其中每个条目对应于字母表中该位置的字母。

我使用按@Daniel's comment创建字母的方法;大都会现在有效。

示例,测试William Shakespeare

Alphabet.'

ans =

  Columns 1 through 15

     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0

  Columns 16 through 30

     0     0     0     1     0     0     0     1     0     0     0     3     0     0     0

  Columns 31 through 45

     3     0     0     1     2     0     1     2     1     0     0     1     0     1     1

  Columns 46 through 52

     0     0     0     0     0     0     0