如何在matlab中找到存储在两个不同向量中的两个或多个相等的字符串

时间:2014-05-02 12:40:12

标签: string matlab

我在数据文件中有两个带有字符串的向量(大小不同)。 我想在每个向量中找到两个(或更多)相似字符串的位置。 E.g:

a=['str1', 'str2', 'str3', 'str4', 'str5', 'str6'];
b=['str3', 'str1', 'str4', 'str4'];

我想输出如下:

b(1) corresponds to a(3)
b(2) corresponds to a(1)
b(3) corresponds to a(4)
b(4) corresponds to a(4)

有可能吗?

2 个答案:

答案 0 :(得分:2)

如果将字符串存储在单元格数组中,则可以这样执行:

>> a = {'str1', 'str2', 'str3', 'str4', 'str5', 'str6'};
>> b = {'str3', 'str1', 'str4', 'str4'};
>> result = cellfun(@(x) find(strcmp(a, x)), b, 'UniformOutput', false);

result = 

    [3]    [1]    [4]    [4]

注意:结果是一个单元格数组。因此,result{i} == j表示b(i)对应a(j)。如果b(i)中未找到a,则result{i}为空。

答案 1 :(得分:2)

另一种方法是使用 ismember 命令,该命令将返回一个逻辑数组,指示数组 b 的元素是否是数组 a 。它还可以返回一个向量,该向量指示 a b 元素的位置。使用您的示例:

[ismem,idxa]=ismember(b,a)

返回结果

ismem =
 1     1     1     1
idxa =
 3     1     4     4

所以我们看到 b 的每个成员都在 a 中(由于ismem向量是全部的),我们看到 a 是idxa向量中 b 的元素。 (请注意,如果 b 的元素不在 a 中,则两个向量中都会有一个零元素。)