2016-02-25 45 views
0

我有两个字符串数组,我想找到其中从第一阵列中的每个字符串是第二阵列中,所以我想这:查找字符串的指标在一个字符串数组在Matlab

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

这并未似乎没有工作,我得到一个错误:“必须是一行”。

+0

这两个数组是否有相同的字符串,但在不同的位置? – neerad29

+0

strfind用于在另一个字符串中查找字符串,而不是在字符串数组内。 – neerad29

回答

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 
1

只是为了完整性,字符串数组只是一个char矩阵。这可能是相当严格的,因为所有的字符串必须具有相同数量的元素。这就是@ 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()如果a(i,:)在的b第j个细胞中发现在j位置true返回一个布尔值阵列(AreStringFound)和find()确实会返回j的价值,我们正确的指数。如果在b的多个位置中找到给定的字符串,此代码更加健壮并且可以正常工作。
相关问题