/ / Jak mogę podzielić słowo na jego litery składowe? - perl

Jak mogę podzielić słowo na litery składowe? - perl

Pracuję z Perlem i mam tablicę zawierającą tylko jedno słowo:

@example = ("helloword")

Chcę wygenerować kolejną tablicę, w której każdy element jest literą ze słowa:

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

Muszę to zrobić, ponieważ muszę policzyć liczby „h”, „e” ... Jak mogę to zrobić?

Odpowiedzi:

5 dla odpowiedzi № 1

Aby policzyć, ile razy litera wystąpiła w ciągu,

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

w przeciwnym razie można podzielić łańcuch i przypisać listę do tablicy,

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

3 dla odpowiedzi № 2

Nie rozumiem dokładnie tego, co musisz liczyć, ale być może możesz wziąć fragmenty z tego przykładu, który używa skrótu do przechowywania liter i liczby każdego ...

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",

Wydajność:

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

2 dla odpowiedzi nr 3

Spróbuj użyć tego kodu, który znajdziesz tutaj: http://www.comp.leeds.ac.uk/Perl/split.html

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


-1 dla odpowiedzi № 4

Możesz oczywiście użyć split(//,"helloworld"), ale to nie jest tak wydajne jak rozpakowanie. Określenie szablonu do rozpakowania może być nieco strome, ale powinno to działać dla Ciebie: unpack("(A)*","helloworld"). Na przykład:

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

Aby policzyć liczbę liter, można albo założyć, że każdy znak „słowa”, w którym podzielono łańcuch, jest literą i po prostu ocenia listę w kontekście skalarnym (lub użyj „długości”), np. print(scalar(@letters),"n"); lub print(length(@letters),"n"), LUB możesz utworzyć zmienną licznika i zwiększyć ją na mapie, gdy dopasowany jest wzór litery, np .:

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

Lub możesz użyć tej samej oceny listy w sztuczce skalarnej z grep:

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

W perlu są oczywiście inne sposoby, aby to zrobić.

EDYCJA: W przypadku, gdy źle zinterpretowałem pytanie i chcesz wiedzieć, ile liter znajduje się w ciągu, to powinno wystarczyć:

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

Rozwiązanie to ma tę zaletę, że zachowuje unikalne litery w kolejności ich pierwszego wystąpienia w słowie, w którym zostały znalezione.