2

私は perl を学び始めており、正規表現を使用して単純なバブル ソートを書いています。ただし、正しく並べ替えることができません (アルファベット順、空白で区切る)。同じ文字列を返すだけです。誰か助けてくれませんか?本当にシンプルなものだと確信しています。ありがとう:

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

my $document=<<EOF;
This is the beginning of my text...#more text here;
EOF

my $continue = 1;
my $swaps = 0;
my $currentWordNumber = 0;
while($continue)
{
        $document =~ m#^(\w+\s+){$currentWordNumber}#g;
        if($document =~ m#\G(\w+)(\s+)(\w+)#)
        {
                if($3 lt $1)
                {
                        $document =~ s#\G(\w+)(\s+)(\w+)#$3$2$1#;
                        $swaps++;
                }
                else
                {
                        pos($document) = 0;
                }
                $currentWordNumber++;
        }
        else
        {
                $continue = 0 if ($swaps == 0);
                $swaps = 0;
                $currentWordNumber = 0;
        }
}

print $document;

解決済み: 問題がわかりました。単語の後の句読点を考慮していませんでした。

4

1 に答える 1

2

すべての単語を並べ替えるだけの場合は、正規表現を使用する必要はありません...テキストを改行と空白で分割するだけで、はるかに高速になります。

sub bsort {
    my @x = @_;
    for my $i (0..$#x) {
        for my $j (0..$i) {
            @x[$i, $j] = @x[$j, $i] if $x[$i] lt $x[$j];
        }
    }
    return @x;
}

print join (" ", bsort(split(/\s+/, $document)));
于 2012-06-26T03:09:06.803 に答える