如何用另一个字符串数组中的单元格索引填充字符串的单元格数组?

时间:2016-09-03 19:09:22

标签: string matlab cell-array indices

我正在尝试填充字符串attributes(764x1单元格)的单元格数组,其中每个单元格的索引位于字符串data(269x1)的另一个单元格数组中(如果单元格内容(字符串)在data中找到。我写了以下代码:

for i=1:length(attributes)
    for j=1:length(data)
        attributes{i,1}=strfind(data{j,1}, attributes{i,1});
    end
end

我得到空单元格:

inedx

2 个答案:

答案 0 :(得分:0)

在内部循环的第一次迭代中,您将覆盖attributes

示例:

data{1} = 'aabbcc';
data{2} = 'bbaacc';
data{3} = 'ccaabb';

attributes{1} = 'aa';
attributes{2} = 'bb';
attributes{3} = 'cc';

for i = 1:length(attributes)
    for j = 1:length(data)
        attributes{i} = strfind(data{j}, attributes{i});
    end
end

内部循环j = 1的第一次迭代后:
attributes{1} = 1

内部循环j = 2的第一次迭代后:
attributes{1} = []

因为前一次迭代中的attributes{1} = 1 attributes{i} = strfind(data{j}, attributes{i});相当于:
attributes{1} = strfind(data{2}, 1);
在数据{2}中找不到1和1。

您可能意味着做的事情类似于以下代码:

data{1} = 'aabbcc';
data{2} = 'bbaacc';
data{3} = 'ccaabb';

attributes{1} = 'aa';
attributes{2} = 'bb';
attributes{3} = 'cc';

%Initialize new 2D cell array.
attrib_indexes = cell(length(attributes), length(data));

for i = 1:length(attributes)
    for j = 1:length(data)
        %Store result in attrib_indexes{i, j} instead of attributes.
        attrib_indexes{i, j} = strfind(data{j}, attributes{i});
    end
end

我建议您学习使用调试器,这比在Stack Overflow中发布问题更容易...

答案 1 :(得分:0)

您可以使用one of the variants of strfind一次查看所有head

*head = (*head)->next;

这将导致data - by - att_ind = cell(length(attributes),length(data)); % Initialize a result cell array for k = 1:length(attributes) att_ind(k,:) = strfind(data, attributes{k}); end 单元格数组 length(attributes)length(data)att_ind(k,n)的所有实例。如果没有这样的实例,则attributes{k}为空单元格。