
Mam napisac program ktory szuka jednej frazy ($search) w innej frazie ($belt). Ma szukac w nastepujacy sposob: przechodzi po znakach z $belt, jezeli dany znak z $belt pokrywa sie ze pierwszym z $search to przechodzi ze stanu 0 w stan 1 i sprawdza kolejny. Jezeli sie zgadza to przechodzi w stan 2 itd. Logicznym jest ze jezeli nr stanu jest rowny dlugosci $search to napis zostal znaleziony. Jest jeszcze znak * wystepujacy w $search ktory zastepuje kazdy inny, czyli w jego wypadku automatycznie przechodzimy w stan wyższy.
Mam jednak powien problem bo moj program dziala nie dla wszystkich przypadków.
Oto kod:
<?php function stringtoarray($string){ $cur = 0; while($cur < $len){ $char = $string{$cur}; $cur = $cur + 1; } return $characterarray; } $belt = stringtoarray('ala ma kota'); $search = stringtoarray('m*'); for ($j=0; $j<count($search); $j++) for ($i=0; $i<count($belt); $i++) $table[$j][$i] = 0; $j = 0; for ($i=0; $i<count($belt); $i++) { if ($belt[$i] == $search[$j] || $search[$j] == '*') { $j++; } else { if ($j) $j--; } $table[$j-1][$i] = $j; $j = 0; } } for ($j=0; $j<count($search); $j++) { } ?>
teraz pięknie znajdzie 'm*' jako 'ma'
na samym dole wygeneruje tablice przejsc, ale nas to nie obchodzi.
Niestety nie działa to dla przypadku np.
$belt = 'alaalaalaalab';
i
$search = 'alab';
dlaczego? jak to poprawić? sa jakies inne dla ktorych nie zadziała?
prosze o pomoc