计算字符串

时间:2015-05-04 18:08:22

标签: matlab

我试图找出每个字母出现在单元格数组中的次数。

我必须在Matlab中打开这个数据文件

A 12 A 88
B 23 F 22
C 55 B 77
D 66 H 44

我将其命名为Thor.dat,这是我在Matlab中的代码

fid = fopen('Thor.dat')

if fid == -1
    disp ('File open not successful')
else
    disp ('File open is successful')
    mat = textscan(fid,'%c %f %c %f')
    [r c] = size(mat)
    charoccur(mat)        
    fclose(fid)
end

并且charoccur函数是

function occurence = charoccur(mat)
% charoccur finds the number of times each character appears in a column

[row, col] = size(mat);
[row, ccol] = size(mat{1});

[mat] = unique(mat{i})
d = hist(c,length(a))
end

1 个答案:

答案 0 :(得分:0)

以下是使用uniquestrcmp执行此操作的方法。基本上循环通过单元格数组并将每个唯一字母的出现次数相加。使用strcmp给出逻辑数组0和1.通过对1进行求和,可以得到找到字母的总次数。

clear
clc


%// Input cell array
mat = {'A' 12 'A' 88;'B' 23 'F' 22;'C' 55 'B' 77;'D' 66 'H' 44;'W' 11 'C' 9;'H' 3 'H' 0};

mat = [mat(:,1) mat(:,3)]

%// Find unique letters
UniqueLetters = unique(mat);

%// Initialize output cell
OutputCell = cell(numel(UniqueLetters,2));

%// Loop through each unique letter and count number of occurence
for k = 1:numel(UniqueLetters);
    %// 1st column: letter
    OutputCell(k,1) = UniqueLetters(k);

    %// 2nd column: sum of occurences
    OutputCell(k,2) = {sum(sum(strcmp(UniqueLetters{k},mat)))};

end

OutputCell

OutputCell现在看起来像这样:

OutputCell = 

    'A'    [2]
    'B'    [2]
    'C'    [2]
    'D'    [1]
    'F'    [1]
    'H'    [3]
    'W'    [1]

希望有助于您入门!

修改

根据您的评论,对于输出单元阵列的初始化:

OutputCell = cell(numel(UniqueLetters,2));

我创建了一个Nx2单元阵列,其中N(行数)是通过调用unique标识的唯一单元的数量。在上面的例子中有7个独特的字母,所以我创建了一个7x2单元格数组来存储:

1)在第1栏中的实际字母

2)在第2列中,mat

中找到此字母的次数