我有兩個字符串數組,我想找到其中從第一陣列中的每個字符串是第二陣列中,所以我想這:查找字符串的指標在一個字符串數組在Matlab
for i = 1:length(array1);
cmp(i) = strfind(array2,array1(i,:));
end
這並未似乎沒有工作,我得到一個錯誤:「必須是一行」。
我有兩個字符串數組,我想找到其中從第一陣列中的每個字符串是第二陣列中,所以我想這:查找字符串的指標在一個字符串數組在Matlab
for i = 1:length(array1);
cmp(i) = strfind(array2,array1(i,:));
end
這並未似乎沒有工作,我得到一個錯誤:「必須是一行」。
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
只是爲了完整性,字符串數組只是一個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
的多個位置中找到給定的字符串,此代碼更加健壯並且可以正常工作。
這兩個數組是否有相同的字符串,但在不同的位置? – neerad29
strfind用於在另一個字符串中查找字符串,而不是在字符串數組內。 – neerad29