/ / Ako môžem rozdeliť slovo na jednotlivé písmená? - perl

Ako môžem rozdeliť slovo do jeho zložiek? - perl

Pracujem s Perlom a mám pole s jediným slovom:

@example = ("helloword")

Chcem vygenerovať ďalšie pole, v ktorom je každý prvok písmenom zo slova:

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

Musím to urobiť, pretože musím spočítať čísla „h“, „e“ ... Ako to môžem urobiť?

odpovede:

5 pre odpoveď č. 1

Ak chcete spočítať, koľkokrát sa v reťazci vyskytlo písmeno,

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

v opačnom prípade môžete reťazec rozdeliť a priradiť ho zoznamu,

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

3 pre odpoveď č. 2

Nerozumiem presne tomu, čo potrebujete počítať, ale možno si z tohto príkladu môžete vziať kúsky, ktoré pomocou hashu ukladajú písmená a počty jednotlivých ...

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: $vn";
}
print "Total letters in string: $totaln",

Výkon:

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

2 pre odpoveď č. 3

Skúste použiť tento kód, ktorý nájdete tu: http://www.comp.leeds.ac.uk/Perl/split.html

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


-1 pre odpoveď č. 4

Môžete samozrejme použiť split(//,"helloworld"), ale nie je to také účinné ako rozbalenie. Zistenie šablóny na rozbalenie môže byť trochu strmé, ale malo by to fungovať pre vás: unpack("(A)*","helloworld"), Napríklad:

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

Ak chcete spočítať počet písmen, môžete buď predpokladať, že každý znak „slova“, do ktorého ste reťazec rozdelili, je písmeno a zoznam jednoducho vyhodnoťte v skalárnom kontexte (alebo použite „dĺžka“), napr. print(scalar(@letters),"n"); alebo print(length(@letters),"n"), ALEBO by ste mohli vytvoriť počítaciu premennú a zvýšiť ju na mape, keď sa zhoduje vzor listu, napr .:

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

Alebo môžete použiť rovnaké hodnotenie zoznamu v skalárnom triku s grepom:

print(scalar(grep {/w/} @chars),"n");

Existujú samozrejme, in perl, iné spôsoby, ako to urobiť.

ÚPRAVA: V prípade, že som otázku nesprávne vyložil a chcete vedieť, koľko každého písmena je v reťazci, malo by to stačiť:

$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")}

Výhodou tohto riešenia je zachovanie jedinečných písmen v poradí ich prvého výskytu v slove, v ktorom sa našli.