15章(文字列処理とソート) 練習問題3

ユーザから与えられた文字列の中から、与えられた部分文字列が現れる場所を全て探して、その位置を表示するプログラムを書いてください。

む…難しい。
タイムアップで機能を実装できていませんが、自作コードはこちらになります。

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

#my ($str, $search_str) = @ARGV;
my ($str, $search_str) = ("this is a test.", "is");
my $index = -1;
my @indexes;

until ($index == 0) {
    my $ans = index($str, $search_str, $index);
    push @indexes, $ans;
    $index = $ans + 1;
}

print "@indexes\n";

実行結果はこちら(バグ有)

2 5 -1

−1は表示されてはいけませんね。


解答を見てみます。
微妙に自作解答と似ていますね。
もうひといきだったのかな。


解答を参考にして、コードを書き直してみます。

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

#my ($str, $search_str) = @ARGV;
my ($str, $search_str) = ("this is a test.", "is");
my @indexes;

for (my $start_idx = -1; ; ) {
    $start_idx = index($str, $search_str, $start_idx + 1);
    last if ($start_idx == -1);
    push @indexes, $start_idx;
}

print "@indexes\n";

実行結果はこちら。

2 5

このレベルの問題を悩まずサクサク進めたら理想なんですけどねー。
精進精進。