在matlab中求一个元胞数组中一个字符出现的次数?

请教一下,在matlab中求一个元胞数组中一个字符出现的次数?
最新回答
三生路

2024-09-20 01:27:00

  1. 首先,你的元胞数组除了包含

    字符串
    ,还有没有其他类型的数据?如果有,怎样处理(例如,元胞数组的元素自身还可以是元胞数组,或者
    结构体
    的域是否要继续判断是不是字符串)?

  2. 如果元胞数组只包含字符串,或者,只处理字符串而忽略其他类型,则可以用一个循环遍历元胞数组的每个元素,对每个字符串进行你要求的操作。

  3. 求一个字符串中某字符出现的次数非常简单,例如,求str中'a'的个数,直接用:sum(str=='a')

追问
在元胞中用不了==吧
追答
我在前面的第2条说了,通过循环对元胞数组进行遍历。
第3条是针对元胞数组的每个元素(字符串)说的。
夏櫻之雨

2024-09-20 00:03:22

基本思路:遍历元胞访问元胞的每一个元素并判断该元素是不是char类型,如果是则进行相应判断做统计。考虑到cell内部嵌套cell的情况,需要用到递归,所以要把代码写成一个函数。
函数代码如下:
function [ n ] = countcell( c,t )
n=0;
s=prod(size(c));
for i=1:s
if strcmp(class(c{i}),'char')
n=n+sum(c{i}==t);
elseif strcmp(class(c{i}),'cell')
n=n+countcell(c{i},t);
end
end
end

测试代码:
%生成一个2×2×2cell,里面填充随机字符串,然后内部嵌套一个2×2×2cell,里面也填充随机字符串
clc;clear;
c=cell(2,2,2);
for j=1:7
c{j}=char(randi([1,127],1,99));
end
d=cell(2,2,2);
for j=1:8
d{j}=char(randi([1,127],1,99));
end
c{8}=d;
n=countcell(c,'6')%统计cell里面有几个‘6’字符并输出

程序没有报错。每次运行,n得到一个不同的正整数。程序无误。