Matlab - 如何逐个字母地比较两个字符串?

时间:2013-05-16 12:22:00

标签: string matlab compare vectorization

基本上,我有两个相同长度的字符串,例如,为了示例,请说'AGGTCT'和'AGGCCT'。我想按位置比较它们的位置,并获得它们不匹配时的读数。所以在这里我希望得到1,因为只有1个位置,他们在位置4不匹配。如果有人有位置比较代码的想法,这将有助于我开始很多。

谢谢!

3 个答案:

答案 0 :(得分:11)

使用以下语法获取相同大小的字符串的不相似字符数:

sum( str1 ~= str2 )

如果您想要不区分大小写,请使用:

sum( lower(str1) ~= lower(str2) )

表达式str1 ~= str2执行两个字符串的char-by-char比较,产生与字符串大小相同的逻辑向量,其中true不匹配(使用~= )和false匹配的地方。要获得结果,只需将true值(不匹配)的数量相加。

编辑:如果您想计算匹配字符的数量,您可以:

  1. 使用“等于”==运算符(而不是“不等于”~=运算符):

    sum( str1 == str2 )
    
  2. 从总数中减去不匹配的数量:

    numel(str1) - sum( str1 ~= str2 )
    

答案 1 :(得分:1)

您可以比较字符串的所有元素:

r = all(seq1 == seq2)

这将通过char比较char,如果结果数组中的所有元素都为true,则返回true。如果字符串可以有不同的大小,您可能需要先比较大小。另一种选择是

r = any(seq1 ~= seq2)

另一种解决方案是使用strcmp

r = strcmp(seq1, seq2)

答案 2 :(得分:0)

只是想指出您要求计算hamming distance(因为您要求替代方案 - 该文章包含指向某些内容的链接)。这已经讨论过了here。简而言之,内置命令pdist可以做到。