Perl 唯一字符计数

Perl 唯一字符计数,perl,Perl,嗨,我是一个新手,我需要关于我应该键入什么的帮助,以便根据用户从键盘输入的内容显示唯一字符数 我已经设置好显示字符串中的字符数 代码如下: #!C:\Strawberry\perl\bin\perl use strict; use warnings; print "Input Username"; my $str = <>; chomp ($str); print "You have typed: $str\n"; my $str_length = length($str); pri

嗨,我是一个新手,我需要关于我应该键入什么的帮助,以便根据用户从键盘输入的内容显示唯一字符数 我已经设置好显示字符串中的字符数

代码如下:

#!C:\Strawberry\perl\bin\perl
use strict;
use warnings;
print "Input Username";
my $str = <>;
chomp ($str);
print "You have typed: $str\n";
my $str_length = length($str);
print "Total Characters = " . $str_length . "\n";
exit;
#!C:\草莓\perl\bin\perl
严格使用;
使用警告;
打印“输入用户名”;
我的$str=;
chomp($str);
打印“您已键入:$str\n”;
my$str_length=长度($str);
打印“字符总数=”$stru长度。“\n”;
出口

最简单的方法是使用哈希:

# split the string into an array of characters
my @chars = split //, $str;  

# lists of values can be assigned to multiple indexes at once
# here we assign each character an empty value, but since hash 
# keys are unique in nature, every subsequent assignment overwrites
# the first.
my %uniq; 
@uniq{@chars} = ();          

# next get the list of keys from the hash and treat that list as 
# a scalar which gives you the count
my $count = scalar keys %uniq;

请参阅:

好的,因此这里的神奇关键词——就Perl而言是“唯一的”。因为这通常意味着哈希是作业的工具

在perl中,哈希是一组键值对,这意味着它非常适合计算唯一项的数量

因此,如果您将字符串拆分为字符:

my %count_of;
foreach my $character ( split ( '', $str ) ) {
    $count_of{$character}++;
}
然后,您可以打印出
%count\u的

foreach my $character ( keys %count_of ) {
   print "$character = $count_of{$character}\n";
}
但是因为
keys%count\u of
为您提供了一个包含每个“键”的数组——perl中的一个好技巧,是标量上下文中的一个数组,只是一个表示元素数量的数字。因此,您可以:

print scalar keys %count_of, " unique characters in $str\n";

您可以使用此功能获得所需的:

sub func($) { my ($str, %hash) = shift; $hash{$_}++ for split //, $str; (length $str, scalar keys %hash) }
如果您需要获取某些字符的计数:

sub uniq_ch_count($$) { my ($ch, $str, %hash) = @_; $hash{$_}++ for split //, $str; $hash{$ch} }
例1:

my ($chars_count, $uniq_chars_count) = func('one two three four');
print $chars_count . " " . $uniq_chars_count . "\n";
输出:

18 10
5
3
例2:

print uniq_ch_count('d', "asdjkasdjd sdfj d ") . " " . uniq_ch_count(' ', "asdjkasdjd sdfj d ") . "\n";
输出:

18 10
5
3

很好的锻炼。这个家庭作业有多大程度?你可以从我的@chars=split/,$str感谢您的快速响应这是一个非常简单的赋值,我知道,但我似乎无法理解唯一的计数部分,但我相信您向我展示的就是这里的赋值程序必须将用户输入的字符串存储在标量变量中(例如,$arbitral\u string,$input\u string等)然后,程序将计算与输入字符串相关的两(2)项:o字符总数(包括空格和标点符号)。o唯一字符的数量(包括空格和标点符号)。•要解决一个或两个计数计算,split函数可能以以下方式有用:my@chars=split(/,$arbitral_string);由于这是一个家庭作业问题,可能需要一些额外的解释(尤其是哈希切片)。如果是家庭作业,我会对首先给他答案感到矛盾。但解释从来没有坏处。我很感激老师告诉我们使用互联网的帮助,因为这是我们在编码方面最大的资源,而这样的回答并不能帮助你理解发生了什么。这就是为什么传统上我们抵制“家庭作业”问题的原因——因为问题的关键不在于找到答案,而在于理解发生了什么。