2016-02-25 65 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的多個位置中找到給定的字符串,此代碼更加健壯並且可以正常工作。