查找字符串的指标在一个字符串数组在Matlab
问题描述:
我有两个字符串数组,我想找到其中从第一阵列中的每个字符串是第二阵列中,所以我想这:查找字符串的指标在一个字符串数组在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