Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Algorytm sprawdzania poprawności zagnieżdżenia nawiasów, ...poszukiwany
slawa
post
Post #1





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 8.02.2005

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


Jak w temacie. Poszukuje wszelkich wskazówek jak napisać skrypt który sprawdzał by poprawność zagnieżdżenia nawiasów., mając na wejściu tablicę z kolejnymi nawiasami. Może ktoś się spotkał z takim algorytmem -> prosze o informację (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
LBO
post
Post #2





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


To i ja się podłączę.
  1. <?php
  2. /**
  3.  * Funkcja sprawdzająca poprawnośc zagnieżdżenia nawiasów podanych w tablicy
  4.  * $delimiters.
  5.  *
  6.  * @param array $delimiters  Tablica z kolejnymi nawiasami.
  7.  * @return boolean Zwraca TRUE, jeżeli zagnieżdzenie nawiasów jest
  8.  * poprawne lub FALSE w przeciwnym razie.
  9.  */
  10. function checkDelimiters($delimiters) {
  11. // inicjalizacja stosu
  12. $stack = array();
  13. foreach ($delimiters as $delimiter) {
  14. switch ($delimiter) {
  15. case '(':
  16. // każdy nawias otwierający kładziemy na stosie
  17. $stack[] = '(';
  18. break;
  19.  
  20. case ')':
  21. // wykrywa nieprawidłową kolejność nawiasów np. )(())(
  22. if (array_pop($stack) != '(') {
  23. return false;
  24. };
  25. break;
  26.  
  27. default:
  28. print('Błąd, argument nie jest nawiasem'.PHP_EOL);
  29. return false;
  30. break;
  31. };
  32. };
  33. if (count($stack) == 0) {
  34. // jeżeli stos został opróżniony, nawiasy były poprawnie zagnieżdżane.
  35. return true;
  36. };
  37. return false;
  38. };
  39. ?>

edit:
oraz przykład zastosowania.
  1. <?php
  2. $delimiters = array('(', '(', '(', ')', ')', ')');
  3. var_dump(checkDelimiters($delimiters)); // bool(true)
  4.  
  5. $delimiters = array(')', '(', '(', '(', ')', ')');
  6. var_dump(checkDelimiters($delimiters)); // bool(false)
  7. ?>


Ten post edytował LBO 4.07.2006, 01:24:03
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: 26.12.2025 - 01:45