Lit*_*ner 0 perl for-loop character
我需要计算字符串中的字母"e"
$x="012ei ke ek ek ";
到目前为止,我已尝试使用for循环:
$l=length($x);
$a=0;
for($i=0;$i<$l;$i++)
{$s=substr($x,$i,1);
if($s=="e")
{$a++;}
print $a;
Run Code Online (Sandbox Code Playgroud)
您的代码有一些问题.你忘了关闭for循环括号,在Perl ==中应该比较数字.使用eq字符串.
还建议您使用警告并启用严格模式,这可以帮助您调试此操作.在你的情况下,因为e
将被视为0,所以另一个char子串,1 并且2
将是与之e相比时唯一不等于的字符==.清理后的代码版本可以写成:
use warnings;
use strict;
my $x = "012ei ke ek ek ";
my $l = length $x;
my $count = 0;
for(my $i = 0; $i < $l; $i++) {
my $s = substr($x, $i, 1);
$count++ if ($s eq "e");
}
print $count;
Run Code Online (Sandbox Code Playgroud)
有多种方法可以实现这一目标.您可以使用与组匹配,如果全局返回列表上下文中的所有匹配项.由于您需要数字,因此请在标量上下文中使用此结果.您可以通过以下方式实现此目的:
my $count = () = $string =~ /(e)/g;
Run Code Online (Sandbox Code Playgroud)
要么:
my $count = @{[ $string =~ /(e)/g ]}
Run Code Online (Sandbox Code Playgroud)
另一种方法是将字符串拆分为字符并grep那些是e:
my $count = grep $_ eq 'e', split //, $string;
Run Code Online (Sandbox Code Playgroud)
并且可能最紧凑的是使用tr它返回标量上下文中的字符数,尽管这确实限制了这种用法仅计算字符:
my $count = $string =~ tr/e//;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
494 次 |
| 最近记录: |