Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] szukanie frazy w frazie
hhg
post
Post #1





Grupa: Zarejestrowani
Postów: 316
Pomógł: 0
Dołączył: 5.07.2006

Ostrzeżenie: (0%)
-----


prosze nie pytajcie dlaczego nie korzystam ze strstr(), nie ja to wymyslalem (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

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:

  1. <?php
  2.  
  3. function stringtoarray($string){
  4. $len = strlen($string);
  5.  
  6. $cur = 0;
  7.  
  8. $characterarray = array();
  9.  
  10. while($cur < $len){
  11. $char = $string{$cur};
  12. array_push($characterarray,$char);
  13. $cur = $cur + 1;
  14. }
  15.  
  16. return $characterarray;
  17. }
  18.  
  19.  
  20. $belt = stringtoarray('ala ma kota');
  21. $search = stringtoarray('m*');
  22. $table = array();
  23.  
  24. for ($j=0; $j<count($search); $j++)
  25. for ($i=0; $i<count($belt); $i++)
  26. $table[$j][$i] = 0;
  27.  
  28. $j = 0;
  29.  
  30. for ($i=0; $i<count($belt); $i++) {
  31.  
  32. echo '- porownanie belt[' . $i . '] = ' . $belt[$i] . ', search[' . $j . '] = ' . $search[$j];
  33.  
  34. if ($belt[$i] == $search[$j] || $search[$j] == '*') {
  35. $j++;
  36. } else {
  37. if ($j) $j--;
  38. }
  39.  
  40.  
  41. echo ' stan ' . $j . '<br />';
  42. $table[$j-1][$i] = $j;
  43.  
  44. if ($j == count($search)) {
  45. echo 'znaleziono napis!<br />';
  46. $j = 0;
  47. }
  48.  
  49. if ($j) echo '<br />';
  50. }
  51.  
  52.  
  53. echo '<br /><br />tablica przejsc: <br />nr poszczegolnych znakow / stany';
  54. for ($j=0; $j<count($search); $j++) {
  55. echo '<div style="float:left;"><pre>';
  56. var_dump($table[$j]);
  57. echo '</pre></div>';
  58. }
  59.  
  60. ?>


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
heaven
post
Post #2





Grupa: Nieautoryzowani
Postów: 92
Pomógł: 15
Dołączył: 21.10.2006

Ostrzeżenie: (0%)
-----


No zwal jak zwal...
Moj i Twoj kod przechodzi taka sama ilosc razy po stringach (jednak twoj robi w niektorych przypadkach wiecej niepotrzebnych przejsc) wiec nie nazwalbym tego komplikowaniem tym bardziej ze moj kod jest bardziej intuicyjny
No ale racja jest jak ... kazdy ma swoja

Ten post edytował heaven 14.11.2007, 12:30:20
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 03:19