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

2024-11-19 19:43:35
推荐回答(2个)
回答1:

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

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

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

回答2:

基本思路:遍历元胞访问元胞的每一个元素并判断该元素是不是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得到一个不同的正整数。程序无误。