我正在尝试填充字符串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
我得到空单元格:
答案 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}
为空单元格。