Perl 查找字符串中存在的子字符串,并计算出现的次数
有人能告诉我怎么了吗?由于程序用于查找给定字符串中的子字符串,并计算这些子字符串的出现次数。但是子字符串必须检查每三个字母的出现情况 例如:字符串:agauuaga(即用于AGA、UUU、AGA) 产出:AGA-2 UUU-1Perl 查找字符串中存在的子字符串,并计算出现的次数,perl,parsing,Perl,Parsing,有人能告诉我怎么了吗?由于程序用于查找给定字符串中的子字符串,并计算这些子字符串的出现次数。但是子字符串必须检查每三个字母的出现情况 例如:字符串:agauuaga(即用于AGA、UUU、AGA) 产出:AGA-2 UUU-1 print"Enter the mRNA Sequence\n"; $count=0; $count1=0; $seq=<>; chomp($seq); $p=''; $ln=length($seq); $j=$ln/3; for($i=0,$k=0;$i&l
print"Enter the mRNA Sequence\n";
$count=0;
$count1=0;
$seq=<>;
chomp($seq);
$p='';
$ln=length($seq);
$j=$ln/3;
for($i=0,$k=0;$i<$ln,$k<$j;$k++) {
$fra[$k]=substr($seq,$i,3);
$i=$i+3;
if({$fra[$k]} eq AGA) {
$count++;
print"The number of AGA is $count";
} elseif({$fra[$k]} eq UUU) {
$count1++;
print" The number of UUU is $count1";
}
}
print“输入mRNA序列\n”;
$count=0;
$count1=0;
$seq=;
chomp($seq);
$p='';
$ln=长度($seq);
$j=$ln/3;
对于($i=0,$k=0;$i这是一个Perl常见问题解答:
perldoc -q count
此代码将统计两个字符串的出现次数:
use warnings;
use strict;
my $seq = 'AGAUUUAGA';
my $aga_cnt = () = $seq =~ /AGA/g;
my $uuu_cnt = () = $seq =~ /UUU/g;
print "The number of AGA is $aga_cnt\n";
print "The number of UUU is $uuu_cnt\n";
__END__
The number of AGA is 2
The number of UUU is 1
如果您这样做,您将收到许多指出代码中错误的消息
以下是另一种更具可扩展性的方法:
use warnings;
use strict;
use Data::Dumper;
my $seq = 'AGAUUUAGA';
my %counts;
for my $key (qw(AGA UUU)) {
$counts{$key} = () = $seq =~ /$key/g;
}
print Dumper(\%counts);
__END__
$VAR1 = {
'AGA' => 2,
'UUU' => 1
};
这是一个Perl常见问题解答:
perldoc -q count
此代码将统计两个字符串的出现次数:
use warnings;
use strict;
my $seq = 'AGAUUUAGA';
my $aga_cnt = () = $seq =~ /AGA/g;
my $uuu_cnt = () = $seq =~ /UUU/g;
print "The number of AGA is $aga_cnt\n";
print "The number of UUU is $uuu_cnt\n";
__END__
The number of AGA is 2
The number of UUU is 1
如果您这样做,您将收到许多指出代码中错误的消息
以下是另一种更具可扩展性的方法:
use warnings;
use strict;
use Data::Dumper;
my $seq = 'AGAUUUAGA';
my %counts;
for my $key (qw(AGA UUU)) {
$counts{$key} = () = $seq =~ /$key/g;
}
print Dumper(\%counts);
__END__
$VAR1 = {
'AGA' => 2,
'UUU' => 1
};
尝试一下这一点,以避免重叠:
#!/usr/bin/perl
use strict;
use warnings;
use 5.10.1;
use Data::Dumper;
my $str = q!AGAUUUAGAGAAGAG!;
my @list = $str =~ /(...)/g;
my ($AGA, $UUU);
foreach(@list) {
$AGA++ if $_ eq 'AGA';
$UUU++ if $_ eq 'UUU';
}
say "number of AGA is $AGA and number of UUU is $UUU";
输出:
number of AGA is 2 and number of UUU is 1
尝试一下这一点,以避免重叠:
#!/usr/bin/perl
use strict;
use warnings;
use 5.10.1;
use Data::Dumper;
my $str = q!AGAUUUAGAGAAGAG!;
my @list = $str =~ /(...)/g;
my ($AGA, $UUU);
foreach(@list) {
$AGA++ if $_ eq 'AGA';
$UUU++ if $_ eq 'UUU';
}
say "number of AGA is $AGA and number of UUU is $UUU";
输出:
number of AGA is 2 and number of UUU is 1
这是一个在Perl中完成事情的速度的例子。将这些串作为交替项组合在一起是确保没有重叠的一种方法。此外,散列也是计算它们的出现次数的一种很好的方法
$values{$_}++ foreach $seq =~ /(AGA|UUU)/g;
print "AGA-$values{AGA} UUU-$values{UUU}\n";
然而,我通常想把它概括为这样的事情,认为这可能不是你必须做的唯一一次这样的事情
use strict;
use warnings;
use English qw<$LIST_SEPARATOR>;
my %values;
my @spans = qw<AGA UUU>;
my $split_regex
= do { local $LIST_SEPARATOR = '|';
qr/(@spans)/
}
;
$values{$_}++ foreach $seq =~ /$split_regex/g;
print join( ' ', map { "$_-$values{$_}" } @spans ), "\n";
使用严格;
使用警告;
使用英语qw;
我的%价值观;
我的@spans=qw;
我的$split_regex
=do{local$LIST_分隔符='|';
qr/(@span)/
}
;
$values{$\}++foreach$seq=~/$split\u regex/g;
打印连接(“”,映射{$\-$values{$\}}@span),“\n”;
这是一个用Perl完成事情的速度的例子。将这些串作为替代项组合在一起是确保没有重叠的一种方法。此外,哈希也是计算它们的出现次数的一种很好的方法
$values{$_}++ foreach $seq =~ /(AGA|UUU)/g;
print "AGA-$values{AGA} UUU-$values{UUU}\n";
然而,我通常想把它概括为这样的事情,认为这可能不是你必须做的唯一一次这样的事情
use strict;
use warnings;
use English qw<$LIST_SEPARATOR>;
my %values;
my @spans = qw<AGA UUU>;
my $split_regex
= do { local $LIST_SEPARATOR = '|';
qr/(@spans)/
}
;
$values{$_}++ foreach $seq =~ /$split_regex/g;
print join( ' ', map { "$_-$values{$_}" } @spans ), "\n";
使用严格;
使用警告;
使用英语qw;
我的%价值观;
我的@spans=qw;
我的$split_regex
=do{local$LIST_分隔符='|';
qr/(@span)/
}
;
$values{$\}++foreach$seq=~/$split\u regex/g;
打印连接(“”,映射{$\-$values{$\}}@span),“\n”;
您不清楚字符串“AGAGAGA”包含多少个“AGA”
如果2
如果3,
您不清楚字符串“AGAGAGA”包含多少个“AGA”
如果2
如果3,
如果我理解正确(当然这是有问题的;到目前为止,几乎每个答案对你的问题的解释都与其他答案不同):
如果我理解正确(当然这是有问题的;到目前为止,几乎每个答案对你的问题的解释都与其他答案不同):
为什么用foreach而不是while?@ysth,我认为它适合:给定正则表达式和输入有一个可确定的捕获数,因此:foreach
capture,增加该字符串的计数。为什么用foreach而不是while?@ysth,我认为它适合:给定正则表达式和输入有一个可确定的捕获数,因此:foreach
capture,增加该字符串的计数。