Thread starten zwei Subs - Eingabe / Ausgabe (4 answers)
Opened by Mara at 2011-12-29 11:45

Mara
 2011-12-29 12:48
#155167 #155167
User since
2011-12-29
3 Artikel
BenutzerIn
[default_avatar]
*grummel* da war noch ein fehler.. # stand nicht vor Matcher.. -.- so nun stimmt es wohl...


Code (perl): (dl )
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
#!/usr/bin/perl -w
use strict;
use warnings;


#   Berechnung des Präfix  ######                                         

sub ermorde_Knuth_next{              
        my($P)=@_;                        # das Muster

        use integer;
        
        my$m=(0..lenght($P)-1); 
        my$i=0;
        my$j=-1;
        
        my @next;                         # Array 


        for ($next[0] = -1; $i < $m; ) {
        while ( $j > -1 &&
                substr( $P, $i, 1 ) ne substr( $P, $j, 1 ) ) {
            $j = $next[ $j ];
        }
        $i++;
        $j++;
        $next[ $i ] =
            substr( $P, $j, 1 ) eq substr( $P, $i, 1 ) ?
                $next[ $j ] : $j;
     }
        return ($m,@next);     # Länge des Musters und der Prefix Funktion
}


##############################################

                                                #Matcher                                                

    
        sub ermorde_Knuth  {         
         my ( $T, $P ) = @_;            # Text und Muster.
    
    use integer;
    
    my $m = ermorde_Knuth_next( $P );   #knuth_morris_pratt_next
    my ( $n, $i, $j ) = (length($T), 0, 0 );
    my @next;
        
        while ( $i < $n ) {
          while ( $j > -1 &&
                substr( $P, $j, 1 ) ne substr( $T, $i, 1 ) ) {
            $j = $next[ $j ];
        }
        $i++;
        $j++;
        return $i - $j if $j >= $m; # Match - Hurra wir haben einen Treffer.
    }
    return -1;}


Last edited: 2011-12-29 12:50:00 +0100 (CET)

View full thread starten zwei Subs - Eingabe / Ausgabe