Perl中的字符串比较

时间:2014-01-20 15:54:17

标签: string perl

我有一系列序列:

@array = (AAABBBBBCCCCCDDDDD,AEABCBBBCCECCDDDDD...); #up to 55 sequences

我想比较每个序列的每个位置。换句话说,所示序列的第一个位置是A,因此它们是相同的。我想要一个计数器,表明每个字符串中有多少个位置没有相同的字母。

AAABB
AAABC
AAABB #5th position is not equal, so result is 1.

print $counter -----> 1.

我知道如何使用2个序列:

my $string1 = 'AAABBBBBCCCCCDDDDD';
my $string2 = 'AEABBBBBCCECCDDDDD';
my $result = '';
for(0 .. length($string1)) {
    my $char = substr($string2, $_, 1);
    if($char ne substr($string1, $_, 1)) {
        $counter++;
    }
}
print $counter;

问题是我在一个数组中有55个序列。

2 个答案:

答案 0 :(得分:1)

您在问题的第一部分中采用了正确的方法:使用数组。

my @strings = qw( AAABBBBBCCCCCDDDDD AEABBBBBCCECCDDDDD );
my $result = '';

my $counter = 0;
for my $pos (0 .. length($strings[0])) {
    my $char = substr($strings[0], $pos, 1);
    for my $i (1..$#strings) {
       if (substr($strings[$i], $pos, 1) ne $char) {
          ++$counter;
          last;
       }
    }
}

print "$counter\n";

答案 1 :(得分:0)

咦?如果55个左右的每一个字母中的每个字母都必须相同,那么肯定不需要查看单个字母吗?整个字符串必须相等,所以这回答了问题:

#!/usr/bin/perl
use strict;
use warnings;

my @array = qw(AAABBBBBCCCCCDDDDD AEABBBBBCCECCDDDDD APPLE); 
for my $i (1..$#array){
   print "$array[$i] isn't same as $array[0]\n" if $array[$i] ne $array[0];
}