1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| #! /usr/bin/perl
use warnings;
use strict;
my $DICO_FNAME = "dictionnaire";
sub word_exists {
if (!defined($_[0])) {
return 0;
}
open(DICO, "<", $DICO_FNAME);
while(defined(my $word = <DICO>)) {
if($word eq $_[0]) {
return 1;
}
}
close(DICO);
return 0;
}
sub find_similar {
if(!defined($_[0])) {
return 0;
}
open(DICO, "<", $DICO_FNAME);
my @words = ();
while(defined(my $dword = <DICO>)) {
if(length($dword) == length($_[0])) {
my @string = split(//, $_[0]);
my @chars = split(//, $dword);
my $faults = 0;
for my $char (@chars) {
my $cp = shift(@string);
if(defined($cp)) {
if ($char ne $cp) {
$faults++;
}
}
}
if($faults < 3) {
push(@words, $dword);
}
}
}
return @words;
}
while(defined(my $word = <STDIN>)) {
$word = lc($word);
if(!word_exists($word)) {
my @similis = find_similar($word);
print "Corrections possibles : @similis\n";
} else {
chomp($word);
print "$word : correct.\n";
}
} |
Partager