出个小题目,无聊的人可以来玩一下

出个小题目,无聊的人可以来玩一下

写一个函数count_alpha,参数是一个字符串,返回字符串中的英文字母的个数。高手就先不要亮牌了。
sub count_alpha {
...
}
sub countchar
{
my $count;
my @char=split "",$_[0];
foreach (@char)
{
$count++ if $_ =~ /[a-zA-Z]/;
}
return $count;
}

这个行么??
功能上应该是正确的,但是还不够简练。
my $c = $str =~ s/[a-zA-Z]/$&/g;


QUOTE:
原帖由 redspider 于 2007-9-17 10:36 发表
my $c = $str =~ s/[a-zA-Z]/$&/g;

还可以缩短 5 个字符。
$c++ while $str=~/[a-z]/ig;
#!/usr/bin/perl

use strict;

sub count_alpha{
    my $target=join " ", @_;
    my @result = $target=~ m/[a-z]/ig;
    return @result;   
}

my $result = &count_alpha("aAaa", "b bb", "zzz");
print $result, "\n";
sub count_alpha{
my $count=shift=~/([a-z])/ig;
$count;
}
怎么样


QUOTE:
原帖由 zhangzhangg 于 2007-9-17 12:18 发表
sub count_alpha{
my $count=shift=~/([a-z])/ig;
$count;
}
怎么样

这样能实现吗?发个测试结果看看
结合前面的作法...
sub count_alpha{
  shift=~tr/[A-z]/[A-z]/;
}