Hash Perl子程序
在这里,我修正了我的大部分错误,谢谢大家,在这一点上,请用我的哈希表提供任何其他建议,我如何清除每个单词,并将单词及其频率放入哈希表中,不包括空单词。。我想我的代码从现在开始就可以了。所以你可以关注算法的关键部分,如何接受STDIN上的输入并输出到STDOUT。这样就不需要进行参数检查等。只需一个简单的:Hash Perl子程序,hash,subroutine,perl,Hash,Subroutine,Perl,在这里,我修正了我的大部分错误,谢谢大家,在这一点上,请用我的哈希表提供任何其他建议,我如何清除每个单词,并将单词及其频率放入哈希表中,不包括空单词。。我想我的代码从现在开始就可以了。所以你可以关注算法的关键部分,如何接受STDIN上的输入并输出到STDOUT。这样就不需要进行参数检查等。只需一个简单的: $ prog < words.txt $prog
$ prog < words.txt
$prog
您真正需要的是一个非常简单的算法:
- 读一行
- 把它分成几个字
- 记下字数
- 完成后,显示计数
#! /usr/bin/perl -w
use strict;
my (%data);
while (<STDIN>) {
chomp;
my(@words) = split(/\s+/);
foreach my $word (@words) {
if (!defined($data{$word})) {
$data{$word} = 0;
}
$data{$word}++;
}
}
foreach (sort(keys(%data))) {
print "$_: $data{$_}\n";
}
#/usr/bin/perl-w
严格使用;
我的数据%;
而(){
咀嚼;
我的(@words)=拆分(/\s+/);
foreach我的$word(@words){
如果(!已定义($data{$word})){
$data{$word}=0;
}
$data{$word}++;
}
}
foreach(排序(键(%数据))){
打印“$\:$data{$\}\n”;
}
一旦您了解了这一点并使其在您的环境中工作,您就可以扩展它以满足其他需求:
- 从每个单词中删除非字母字符
- 每行打印三个结果
- 使用输入和输出文件
- 将算法放入子程序中
在循环的第一次迭代中返回相应的值,所有其他数据保持未处理状态。在第一种情况下,您应该创建一个本地数组,在其中存储所有$word,然后返回整个数组。在第二种情况下,您已经有了这样的本地%hash,返回这个hash就足够了。在这两种情况下,您都需要将函数的返回值不分配给标量,而是相应地分配给数组和散列。现在,您实际上丢失了所有数据。您自己做了哪些测试/调试?我知道你在Perl中是新的,但是在任何语言中,代码<>返回 ING在循环中间做你想要的。更具体地说,我完全不知道如何从输入文件中创建单词列表,并将空格和破折号作为分隔符。潜艇只需返回列表。对于我的散列,我希望它把单词和频率放在一个散列中。谢谢大家的回答,你打开了文件;你关闭文件;然后使用
while()
来处理参数,这意味着Perl同时读取输入文件和现在创建但为空的输出文件。你的createList
在第一个单词上返回-这似乎是错的。@KeithThompson:什么@Borodin:问题原始版本中的代码有过多的空行(请检查编辑历史记录)。在你发表评论之前,它已被修复。我将删除我的原始注释。到目前为止,我已经修复了大部分代码。非常感谢您的反馈,谢谢。
while(<$file1>)
return $str, $hash{$str};