0

書きたいコードのセクションに問題があります。私の問題は、2 つの配列とそれらに含まれる要素に基づいています。

(文字列内の位置に関連する) 数値で満たされた 2 つの配列があります。位置の間の部分文字列を選択したいと思います。最初の配列の要素は部分文字列の先頭で、2 番目の配列の要素は部分文字列の末尾です。

私が提供したコードは、ファイルを読み取り、それを文字列にします。

>demo_data
theoemijono
milotedjonoted
dademimamted

弦:

theoemijonomilotedjonoteddademimamted

だから私がしたいのは、部分文字列を抽出することです

emijonomiloted

emimamted

私が書いたコードは、最初の要素配列を取り、それを2番目の配列の対応する要素と比較し、クロスオーバーがないことを確認して、提供されたシーケンスに見られるemiで始まりtedasで終わる部分文字列を保持します

for($i=0; $i<=10; $i++)
{

    if ($rs1_array[$i] < $rs2_array[$i] && $rs1_array[$i+1] > $rs2_array[$i])
    {
        my$size= $rs2_array[$i]-$rs1_array[$i]+ 3);
        my$substr= substr($seq, $rs1_array[$i],$size);
        print $substr."\n";
    }
}

このコードを使用すると、最初の部分文字列に対して機能しますが、最初の配列の要素が少なく、比較を完了できないため、2 番目の部分文字列は無視されます。

アップデート

配列構造:

@rs1_array = (4, 28);
@rs2_array = (15, 22, 34);

こんにちはボロディン、あなたは絶対に正しかった..私は今コードを編集しました! 長さの問題に関連してご覧いただきありがとうございます。奇妙なオフセットの理由は、@rs2_array の値が開始位置であり、この場合、「ted」という単語の残りの部分が考慮されていないためです。文字列を完成させるにはこれが必要です。配列は次のように正しく構築されます。 @rs1_array の要素は開始位置 "emi" を表します。@rs2_array 要素も各 "ted" の開始位置を保持するため、文字列に 2 つの emi と 3 つの ted があるため、バランスが崩れます。

4

1 に答える 1