Kod funkcji strstr()

Kod funkcji strstr()
pol90
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 3 lata
  • Postów:1181
0

Mam takie pytanie potrzebuje kod funkcji strstr() nie pytajcie dlaczego, nigdzie nie znalazłem kodu funkcji strstr więc postanowiłem sam napisać tylko coś nie chce do końca działać

Kopiuj
 function porownaj($tekst1,$tekst2) {

  $licznik = 0;
  $licznik1 = 0;
  $licznik2 = 0;
  $ile_ma_1 = strlen($tekst1);
  $ile_ma_2 = strlen($tekst2);
  while ($licznik <= $ile_ma_1) {
    
    if ($tekst1[$licznik] == $tekst2[0]) {
    while ($licznik1 <= $ile_ma_2) {
      if ($tekst1[$licznik] == $tekst2[$licznik1]) $licznik2++;
      //else $licznik2--;
      //print " f";
      $licznik++;
      $licznik1++;
    }
    //$wynik = $ile_ma_2 / $licznik2;
    //if ($wynik > 2) return true;
    }
    if ($licznik2 >= $ile_ma_2) return true;
    $licznik1 = 0;
    $licznik++;
    
    
  }


  return false;


}

$a = porownaj("tomek","omek");

Takie wywołanie funkcji działa.

Kopiuj
$a = porownaj("tomek","omekk"); 

Dla takiego też zwraca wartość true, a nie powinno.

dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Rzeszów
2

@miej95: jak można linkować do dokumentacji i w tym samym zdaniu szerzyć kłamstwa (że strstr zwraca boolean)?
[strstr] Returns the portion of string, or FALSE if needle is not found.

Potem z kolei piszesz zabugowaną funkcję - masz wyraźnie w dokumentacji strpos, żeby NIE stosować operatora ==, a Ty jeszcze się chwalisz, że "zacząłeś od false", jakby to miało jakieś znaczenie i było różne od po prostu !warunek...
This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE. Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.

Nie chcę Cię atakować, ale prostowanie takich wypowiedzi tylko dokłada innym roboty, więc pierwsze zapoznaj się z tematem, potem odpowiadaj.

Edit: nie mówiąc już o tym, że wyraźnie widać, że intencją autora jest stworzenie takiej funkcji od podstaw, bez wykorzystywania innej funkcji bazującej na stringach, wykonujących tą samą akcję, a różniącej się tylko zwrotką.


edytowany 2x, ostatnio: dzek69
miej95
  • Rejestracja:około 11 lat
  • Ostatnio:około 8 lat
  • Postów:78
0

@dzek69 masz rację pomieszałem, oczywiście chodziło mi o to że jego funkcja zwraca boolean, miałem to napisane w dobrej formie ale jak zacząłem zmieniać żeby było gramatycznie poprawnie to skasowałem gdzies to co nie trzeba. Mój błąd nie zgłębiłem tej funkcji na tyle zeby się wypowiadać.

Sarrus
Skoro przyznajesz się do błędu, to czemu skasowałeś posta? Dziwnie się teraz ten temat czyta :P
miej95
bo nic dobrego nie wnosił :D
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1

Funkcja jest po prostu źle napisana - i to na wielu poziomach.
Musisz nad nią popracować.

  1. nie zwraca części tekstu w wypadku gdy znajdzie jeden w drugim
  2. nie wiadomo po co ma 3 liczniki, do tego o zbyt podobnej nazwie
  3. zeruje nie ten licznik co trzeba (chyba - patrz 2)
  4. ma błąd w warunku if w najgłębszym while
  5. nie sprawdza pustości łańcuchów
  6. może niepoprawnie obsługiwać sytuacje gdy jeden łańcuch jest krótszy od drugiego (chyba - patrz 2)

Popraw i przetestuj, napisz co Ci wyszło.

edytowany 3x, ostatnio: vpiotr

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.