2016-05-02 11 views
-2

文字列の可能なすべての連続部分文字列を生成したいと思います。私はPythonで例を見つけましたが、私が知っている唯一の言語はperlです(そして、やっと、私は初心者です)。誰かがコードをperlに翻訳するのを手伝ったり、perlで解決策を見つけるのを手伝ったりすることができれば、私はとても感謝しています。perlで可能なすべての部分文字列を取得する

コードは、以下である:

aa='ABCD' 

F=[] 

B=[] 

for j in range(1,len(aa)+1,1): 

for i in range(0,len(aa),1): 

    A=str.split(((aa*j)[i:i+j])) 

    B=B+A 

    C=(B[0:len(aa)*len(aa)-len(aa)+1]) 

それはあなたを与える:

C = [ 'A'、 'B'、 'C​​'、 'D'、 'AB'、「BCあなたは事前に構築されたソリューションを使用することに興味がある場合」、 'CD'、 'DA'、 'ABC'、 'BCD'、 'C​​DA'、 'DAB'、 'ABCD'] `

+0

Perlを知っていれば、そのロジックを一から書く方が簡単かもしれません。 –

+1

'BCDA'、' CDAB'、 'DABC'も返されないのはなぜですか? – choroba

+0

http://stackoverflow.com/questions/25887202/use-perl-to-extract-all-possible-substrings – stevieb

答えて

6
#!/usr/bin/perl 
use warnings; 
use strict; 
use feature qw{ say }; 

my $string = 'ABCD'; 

my @substrings; 
for my $length (1 .. length $string) { 
    for my $pos (0 .. length($string) - 1) { 
     push @substrings, substr $string x 2, $pos, $length; 
    } 
} 

say for @substrings; 
+0

すばらしいありがとう! –

1

あなたはをチェックアウトして、String::Substringsというモジュールが見つかりました。

#!/usr/bin/perl 
use strict; 
use warnings; 
use String::Substrings; 
use feature 'say'; 

my $string = 'ABCD'; 
my %substrs; 
for my $len (1..length($string)-1) { 
    $substrs{$_}++ for substrings("$string"x2, $len); 
} 
say for sort keys %substrs; 

結果::

A 
AB 
ABC 
B 
BC 
BCD 
C 
CD 
CDA 
D 
DA 
DAB 
あなたは「ラップアラウンド」のサブストリングをしたいし、実際の文字列と同じ長さを持つ「ストリング」を排除したいので、あなたは少しの操作を行う必要があるでしょう
+0

ありがとうございます:)私はそれをチェックアウトします。 –

関連する問題