如何将单词拆分为组成字母?

时间:2015-09-04 19:55:56

标签: perl

我正在使用Perl,我有一个只有一个单词的数组:

@example = ("helloword")

我想生成另一个数组,其中每个元素都是单词中的一个字母:

@example2 = ("h", "e", "l"...)

我需要这样做,因为我需要计算“h”,“e”的数字......我怎么能这样做?

4 个答案:

答案 0 :(得分:6)

计算字符串中出现的字母数,

print "helloword" =~ tr/h//; # for 'h' letter

否则你可以拆分字符串并将列表分配给数组,

my @example2 = split //, $example[0];

答案 1 :(得分:3)

我没有完全掌握你需要计算的内容,但也许你可以从这个例子中获取一些东西,它使用一个哈希来存储每个字母和数字......

use warnings;
use strict;

my @array = 'helloworld';

my %letters;
$letters{$_}++ for split //, $array[0];

my $total;

while (my ($k, $v) = each %letters){
    $total += $v;
    print "$k: $v\n";
}
print "Total letters in string: $total\n",

输出:

    w: 1
    d: 1
    l: 3
    o: 2
    e: 1
    r: 1
    h: 1
    Total letters in string: 10

答案 2 :(得分:2)

尝试使用此代码:http://www.comp.leeds.ac.uk/Perl/split.html

@chars = split(//, $word);

答案 3 :(得分:-1)

您当然可以使用split(//,"helloworld"),但这不如解压缩效率高。找出要提供解压缩的模板可能有点陡峭,但这应该适合您:unpack('(A)*',"helloworld")。例如:

perl -e 'print(join("\n",unpack("(A)*","helloworld")),"\n")'
h
e
l
l
o
w
o
r
l
d

要计算字母数,你可以假设一个"字的每个字符"将字符串拆分为一个字母,只需在标量上下文中评估列表(或使用' length'),例如print(scalar(@letters),"\n");print(length(@letters),"\n"),或者你可以创建一个计数变量,并在匹配字母模式时在地图中增加它,例如:

my $cnt = 0;
foreach(@chars){$cnt++ if(/\w/)}
print("$cnt\n");

或者您可以使用grep:

对标量技巧中的列表进行相同的评估
print(scalar(grep {/\w/} @chars),"\n");

当然,在perl中,有其他方法可以做到。

编辑:如果我误解了这个问题,你想知道字符串中每个字母有多少,那么这就足够了:

$cnt = 0;
foreach(unpack("(A)*","helloworld")))
  {
    next unless(/\w/);
    $hash->{$_}->{ORD} = $cnt++ unless(exists($hash->{$_}));
    $hash->{$_}->{CNT}++;
  }

foreach(sort {$hash->{$a}->{ORD} <=> $hash->{$b}->{ORD}}
        keys(%$hash))
  {print("$_\t$hash->{$_}->{CNT}\n")}

此解决方案的优点是可以在找到的单词中按照第一次出现的顺序保留唯一字母。