String Perl中的字符串比较

String Perl中的字符串比较,string,perl,String,Perl,我有一个序列数组: @array = (AAABBBBBCCCCCDDDDD,AEABCBBBCCECCDDDDD...); #up to 55 sequences my $string1 = 'AAABBBBBCCCCCDDDDD'; my $string2 = 'AEABBBBBCCECCDDDDD'; my $result = ''; for(0 .. length($string1)) { my $char = substr($string2, $_, 1); if($

我有一个序列数组:

@array = (AAABBBBBCCCCCDDDDD,AEABCBBBCCECCDDDDD...); #up to 55 sequences
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;
我想比较每个序列的每个位置。换句话说,所示序列的第一个位置是A,因此它们是相同的。我想有一个计数器,指示有多少位置不是每个字符串都有相同的字母

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

print $counter -----> 1.
我知道如何使用2个序列来执行此操作:

@array = (AAABBBBBCCCCCDDDDD,AEABCBBBCCECCDDDDD...); #up to 55 sequences
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个序列。

嗯?如果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];
}

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

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进行比较,然后将元素2与元素0进行比较,然后将元素3与元素0进行比较……使用两个嵌套循环(对于每个位置,对于每个序列)这种天真的方法再好不过了。这是相当琐碎的。您的尝试在哪里?我需要差异的数量。我希望在发现不匹配时跳过循环(在
计数器+++
之后),因此检查以下位置。这可能吗?请参见《perldoc perlsyn》中的“下一步”和“最后一步”。