在Matlab中查找字符串数组中的字符串索引

时间:2016-02-25 20:25:55

标签: string matlab

我有两个字符串数组,我想找到第一个数组中每个字符串在第二个数组中的位置,所以我尝试了这个:

for i  = 1:length(array1);
    cmp(i) = strfind(array2,array1(i,:));
end

这似乎不起作用,我收到错误:"必须是一行"。

2 个答案:

答案 0 :(得分:1)

为了完整起见,字符串数组只不过是一个字符矩阵。这可能非常严格,因为所有字符串必须具有相同数量的元素。这就是@ neerad29解决方案的全部内容。

但是,您可能需要考虑字符串的单元格数组,而不是字符串数组,其中每个字符串都可以任意长。我将报告相同的@ neerad29解决方案,但使用单元阵列。代码看起来也会更聪明一些:

a = {'abcd'; 'efgh'; 'ijkl'};
b = {'efgh'; 'abcd'; 'ijkl'};

pos=[];
for i=1:size(a,1)
    AreStringFound=cellfun(@(x) strcmp(x,a(i,:)),b);
    pos=[pos find(AreStringFound)];
end

但可能需要一些额外的词语:

    在我们的案例中,
  • pos将包含索引2 1 3,就像@ neerad29的解决方案
  • cellfun()是一个函数,它将给定函数(在我们的例子中为strcmp())应用于给定单元格数组的每个单元格。 x将是数组b中的通用单元格,将与a(i,:)进行比较
  • 如果cellfun()在第AreStringFoundtrue中找到ja(i,:)将返回一个布局数组bfind() 1}}和j确实会返回b的值,这是我们正确的索引。如果在npm install中的多个位置找到给定字符串,则此代码更加健壮。

答案 1 :(得分:0)

strfind将无效,因为它用于在另一个字符串中查找字符串,而不是在字符串数组中。那么,这个怎么样:

a = ['abcd'; 'efgh'; 'ijkl'];
b = ['efgh'; 'abcd'; 'ijkl'];

cmp = zeros(1, size(a, 1));

for i = 1:size(a, 1)
    for j = 1:size(b, 1)
        if strcmp(a(i, :), b(j, :))
            cmp(i) = j;
            break;
        end
    end
end

cmp =

     2     1     3