2017-04-08 49 views
-2

例如一些字母:如何獲取字符串數組的一些字母和計數在Perl

輸入:對於我的信計數程序測試123。

輸出:t = 5 e = 3 g = 2 n = 2 c = 1 i = 1 p = 1 u = 1 r = 4 o = 3 m = 2 a = 1 f = 1 l = 1 s = 1 y = 1

我嘗試編碼這個問題,但沒有奏效。這是我的代碼:

#!/usr/bin/perl 
use utf8; 
use warnings; 

$line = <STDIN>; 
$len = length($line); 

$count = 0; 
while($count < $len){ 
    print "$line[$count]\n"; 
    $count += 1; 
} 

所以幫我編碼這個問題。因爲我不知道如何編寫這個問題

+1

你的程序甚至沒有嘗試計算單個字母。 Perl字符串不像其他語言那樣是可編入索引的,但是如果它們是那麼你所有的代碼都會將每個字符單獨打印在一行中。我確信這不是一個專業問題,你可能正在學習編程的過程,所以我不認爲只是給你一個解決方案將幫助你學習任何東西。 – Borodin

+0

'echo'測試123爲我的字母計數程序。' | perl -E'$ c {$ _} ++(map {lc} grep/\ w /,split //,<>);對於%c''說'$ _ = $ c {$ _}「 –

回答

1
use strict; 
use warnings; 

my $input = 'Testing 123 for my letter count program.'; 
my %seen; 
my @order = grep { !$seen{$_}++ } lc($input) =~ /([a-z])/ig; 
print "$_ = $seen{$_}\n" for @order; 

輸出

t = 5 
e = 3 
s = 1 
i = 1 
n = 2 
g = 2 
f = 1 
o = 3 
r = 4 
m = 2 
y = 1 
l = 1 
c = 1 
u = 1 
p = 1 
a = 1 
+0

非常感謝... – Nicoraxes

+0

哦,你能解釋一下你的代碼中」my%seen「和」my @order「嗎? – Nicoraxes

+0

'@ order'包含句子中的唯一字母,'%seen'哈希值保存每個字母的出現次數。請查看https://perlmaven.com/unique-values-in-an-array-in-perl –

0
#!/usr/bin/perl 
use strict; use warnings; 

my $input = 'Testing 123 for my letter count program.'; 
my %hash =(); 
map { $hash{lc($_)}++ } grep /[a-zA-Z]/, split('', $input); 
print "Output: "; 
print "$_ = $hash{$_} " for(keys %hash); 

OUTPUT:

Output: e = 3 y = 1 a = 1 r = 4 s = 1 g = 2 c = 1 n = 2 l = 1 t = 5 i = 1 p = 1 f = 1 m = 2 u = 1 o = 3 
相關問題