Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] szukanie frazy w frazie
hhg
post 14.11.2007, 01:48:05
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 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

Posty w temacie


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

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 20:59