如何计算字符在MATLAB中出现在字符数组中的次数?

时间:2015-11-13 06:41:59

标签: matlab

我想确定一个字符出现在字符数组中的次数,不包括它在最后一个位置出现的时间。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

Matlab计算环境中,all variables are arrays, and strings are of type char (character arrays)。所以你的角色阵列实际上是一个字符串(或者实际上是另一种方式)。这意味着您可以在其上应用字符串方法来实现结果。要查找字符出现的总计数,除了名为yourStringVar的字符串/字符数组中的最后一个位置,您可以执行此操作:

YourSubString = yourStringVar(1:end-1)
//Now you have substring of main string in variable named YourSubString without the last character because you wanted to ignore it

numberOfOccurrence = length(find(YourSubString=='Character you want to count'))

Ray已经指出length(find())由于各种原因而不是一个好的方法。或者你可以这样做:

numberOfOccurrence = nnz(YourSubString == 'Character you want to count')

numberOfOccurrence会为您提供所需的结果。

答案 1 :(得分:2)

您可以做的是将每个字符映射到唯一的整数ID,然后通过histcounts确定每个字符的计数。使用unique完成第一步。 unique的第一个输出将为您提供字符串中所有可能的唯一字符的列表。如果要排除字符串中每个字符的最后一次出现,只需从总计数中减去1即可。假设S是你的角色数组:

%// Get all unique characters and assign them to a unique ID
[unq,~,id] = unique(S); 

%// Count up how many times we see each character and subtract by 1
counts = histcounts(id) - 1;

%// Show table of occurrences with characters
T = table(cellstr(unq(:)), counts.', 'VariableNames', {'Character', 'Counts'});

最后一段代码在一个漂亮的表中显示所有内容。我们确保将唯一字符作为单元格放置在单元格数组中。

示例:

>> S = 'ABCDABABCDEFFGACEG';

运行上面的代码,我们得到:

>> T

T = 

    Character    Counts
    _________    ______

    'A'          3     
    'B'          2     
    'C'          2     
    'D'          1     
    'E'          1     
    'F'          1     
    'G'          1