我想确定一个字符出现在字符数组中的次数,不包括它在最后一个位置出现的时间。
我该怎么做?
答案 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