MATLAB:使用 strcmp(s1,s2) 作为带字符串的可变长度向量



我有一个查询,我正在尝试解决

我知道可以使用strcmp(s1,s2)来比较两个不同的字符串以查看它们是否相同。如果是这种情况,它给出 1。

但是,如果您有一个充满字符串的可变长度数组,并且您想要数组中的所有字符串是否相同,那么如何解决此问题。

例如:['NACA64A010' 'NACA64A010' 'NACA64A010' 'NACA64A010']我们可以看到这个数组中的所有字符串都是相同的。 但是,如何使用strcmp(s1,s2).

谢谢大家!

如果你想要字符串之间的所有成对比较:调用ndgrid生成所有组合的索引,然后索引到字符串的单元格数组中并调用strcmp

x = {'NACA64A010' 'NACA64A010'  'NACA64A010' 'NACA64A010'};
[ii, jj] = ndgrid(1:numel(x));
result = strcmp(x(ii), x(jj));

在这种情况下

result =
     1     1     1     1
     1     1     1     1
     1     1     1     1
     1     1     1     1

因为所有字符串都是一样的。

您可能已经

想到了使用strcmp进行成对比较,但您可以直接在单元格数组上使用它:

x={'NACA64A010' 'NACA64A010'  'NACA64A010' 'NACA64A010'}
result=all(strcmpi(x{1},x(2:end)))

将第一个元素与其余元素进行比较。仅当所有元素相等时,它才返回 true。对于成对比较,您可以:

[~,~,c]=unique(x);
result=bsxfun(@eq,c,c.')

如果你用矩阵解决问题(即每一行都是一个字符串),在我看来没有特别好的解决方案,但是如果你的字符串包含在单元格数组中,事情会变得越来越容易和更好。

所以我们从创建这样的单元数组开始:

myStrings={'NACA64A010' 'NACA64A010'  'NACA64A010' 'NACA64A010'};

其中每个单元格包含一个字符串。这也将使您的代码更加健壮,因为每个字符串可以具有不同的长度(如果您将所有字符串连接在矩阵中,则不正确)。
然后指定要在此类单元格数组中找到的字符串:

stringThatMustBeTested='NACA64A010';

现在您可以使用 cellfun() ,这是一个将另一个函数应用于给定单元格数组的每个单元格的函数,如下所示:

results=cellfun(@(x) strcmp(x,stringThatMustBeTested),myStrings);

这样的行只是意味着"strcmp()应用于myStrings内部的每个通用单元格x并将单元格与stringThatMustBeTested进行比较"。

变量 results 将是一个逻辑输出,如果单元格数组中的第 j 个单元格等于要测试的字符串,则元素 j 将为真。如果results完全由 1 s 组成(您可以将其检查为 if sum(results)==length(results) ),那么所有字符串在 myStrings 中都是相同的(假设 stringThatMustBeTested 是单元格数组中的唯一字符串,但无论如何,此解决方案可以扩展到单元格内更广泛的字符串搜索)。

相关内容

  • 没有找到相关文章