Napisz program, który obliczy i wyświetli tablicę prefikso‑sufiksów dla podanego wzorca. Swój algorytm przetestuj dla wzorca "AOAGDNMAOAGUIO".
Specyfikacja:
Dane:
tekst – wzorzec dla którego należy znaleźć tablicę prefikso‑sufiksów; ciąg znaków
Wynik:
Program wyświetla na wyjściu standardowym zawartość tablicaPrefiksoSufiksow - tablicy prefikso‑sufiksów dla podanego wzorca.
R10oWwoofR70r
Przykładowe rozwiązanie zadania:
Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny.
Linia 3. using namespace std średnik.
Linia 5. void generujTablicePrefiksoSufiksow otwórz nawias okrągły string wzorzec przecinek int tablicaPrefiksoSufiksow otwórz nawias kwadratowy zamknij nawias kwadratowy zamknij nawias okrągły otwórz nawias klamrowy.
Linia 6. int j znak równości 0 średnik.
Linia 7. int i znak równości 1 średnik.
Linia 9. tablicaPrefiksoSufiksow otwórz nawias kwadratowy 0 zamknij nawias kwadratowy znak równości 0 średnik.
Linia 10. while otwórz nawias okrągły i otwórz nawias ostrokątny wzorzec kropka size otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 11. if otwórz nawias okrągły wzorzec otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości znak równości wzorzec otwórz nawias kwadratowy j zamknij nawias kwadratowy zamknij nawias okrągły otwórz nawias klamrowy.
Linia 12. j plus plus średnik.
Linia 13. tablicaPrefiksoSufiksow otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości j średnik.
Linia 14. i plus plus średnik.
Linia 15. zamknij nawias klamrowy else otwórz nawias klamrowy.
Linia 16. if otwórz nawias okrągły j wykrzyknik znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy.
Linia 17. j znak równości tablicaPrefiksoSufiksow otwórz nawias kwadratowy j minus 1 zamknij nawias kwadratowy średnik.
Linia 18. zamknij nawias klamrowy else otwórz nawias klamrowy.
Linia 19. tablicaPrefiksoSufiksow otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości j średnik.
Linia 20. i plus plus średnik.
Linia 21. zamknij nawias klamrowy.
Linia 22. zamknij nawias klamrowy.
Linia 23. zamknij nawias klamrowy.
Linia 24. zamknij nawias klamrowy.
Linia 26. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 27. string tekst znak równości cudzysłów AOAGDNMAOAGUIO cudzysłów średnik.
Linia 28. int tablicaPrefiksoSufiksow otwórz nawias kwadratowy tekst kropka size otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy znak równości otwórz nawias klamrowy zamknij nawias klamrowy średnik.
Linia 30. generujTablicePrefiksoSufiksow otwórz nawias okrągły tekst przecinek tablicaPrefiksoSufiksow zamknij nawias okrągły średnik.
Linia 32. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny tekst kropka size otwórz nawias okrągły zamknij nawias okrągły średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy.
Linia 33. cout otwórz nawias ostrokątny otwórz nawias ostrokątny tablicaPrefiksoSufiksow otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów cudzysłów średnik.
Linia 34. zamknij nawias klamrowy.
Linia 36. return 0 średnik.
Linia 37. zamknij nawias klamrowy.
21
Ćwiczenie 2
Napisz program, który wyświetli wszystkie pozycje, na których został znaleziony podany wzorzec w tekście. Użyj algorytmu KMP. Swoje rozwiązanie przetestuj dla napisu "AOAGDNMAOAGUIO" i wzorca "AOAG".
Specyfikacja:
Dane:
napis – tekst do przeszukania; ciąg znaków
wzorzec – wzorzec, który należy odnaleźć; ciąg znaków
Wynik:
Program wypisuje na standardowe wyjście wszystkie indeksy w tablicy napis od których rozpoczyna się wzorzec z tablicy wzorzec, oddzielone spacjami.
R1APcabAxqWZt
Przykładowe rozwiązanie zadania:
Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny.
Linia 3. using namespace std średnik.
Linia 5. void generujTablicePrefiksoSufiksow otwórz nawias okrągły string wzorzec przecinek int tablicaPrefiksoSufiksow otwórz nawias kwadratowy zamknij nawias kwadratowy zamknij nawias okrągły otwórz nawias klamrowy.
Linia 6. int j znak równości 0 średnik.
Linia 7. int i znak równości 1 średnik.
Linia 9. tablicaPrefiksoSufiksow otwórz nawias kwadratowy 0 zamknij nawias kwadratowy znak równości 0 średnik.
Linia 10. while otwórz nawias okrągły i otwórz nawias ostrokątny wzorzec kropka size otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 11. if otwórz nawias okrągły wzorzec otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości znak równości wzorzec otwórz nawias kwadratowy j zamknij nawias kwadratowy zamknij nawias okrągły otwórz nawias klamrowy.
Linia 12. j plus plus średnik.
Linia 13. tablicaPrefiksoSufiksow otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości j średnik.
Linia 14. i plus plus średnik.
Linia 15. zamknij nawias klamrowy else otwórz nawias klamrowy.
Linia 16. if otwórz nawias okrągły j wykrzyknik znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy.
Linia 17. j znak równości tablicaPrefiksoSufiksow otwórz nawias kwadratowy j minus 1 zamknij nawias kwadratowy średnik.
Linia 18. zamknij nawias klamrowy else otwórz nawias klamrowy.
Linia 19. tablicaPrefiksoSufiksow otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości j średnik.
Linia 20. i plus plus średnik.
Linia 21. zamknij nawias klamrowy.
Linia 22. zamknij nawias klamrowy.
Linia 23. zamknij nawias klamrowy.
Linia 24. zamknij nawias klamrowy.
Linia 26. void wyszukajKMP otwórz nawias okrągły string wzorzec przecinek string napis zamknij nawias okrągły otwórz nawias klamrowy.
Linia 27. int tablicaPrefiksoSufiksow otwórz nawias kwadratowy wzorzec kropka size otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy znak równości otwórz nawias klamrowy zamknij nawias klamrowy średnik.
Linia 28. generujTablicePrefiksoSufiksow otwórz nawias okrągły wzorzec przecinek tablicaPrefiksoSufiksow zamknij nawias okrągły średnik.
Linia 30. int i znak równości 0 przecinek j znak równości 0 średnik.
Linia 32. while otwórz nawias okrągły i otwórz nawias ostrokątny napis kropka size otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 33. if otwórz nawias okrągły wzorzec otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości znak równości napis otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias okrągły otwórz nawias klamrowy.
Linia 34. j plus plus średnik i plus plus średnik.
Linia 35. zamknij nawias klamrowy.
Linia 36. if otwórz nawias okrągły j znak równości znak równości wzorzec kropka size otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 37. cout otwórz nawias ostrokątny otwórz nawias ostrokątny otwórz nawias okrągły i minus j zamknij nawias okrągły otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów cudzysłów średnik.
Linia 38. j znak równości tablicaPrefiksoSufiksow otwórz nawias kwadratowy j minus 1 zamknij nawias kwadratowy średnik.
Linia 39. zamknij nawias klamrowy.
Linia 40. else if otwórz nawias okrągły i otwórz nawias ostrokątny napis kropka size otwórz nawias okrągły zamknij nawias okrągły ampersant ampersant wzorzec otwórz nawias kwadratowy j zamknij nawias kwadratowy wykrzyknik znak równości napis otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias okrągły otwórz nawias klamrowy.
Linia 41. if otwórz nawias okrągły j wykrzyknik znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy.
Linia 42. j znak równości tablicaPrefiksoSufiksow otwórz nawias kwadratowy j minus 1 zamknij nawias kwadratowy średnik.
Linia 43. zamknij nawias klamrowy else otwórz nawias klamrowy.
Linia 44. i plus plus średnik.
Linia 45. zamknij nawias klamrowy.
Linia 46. zamknij nawias klamrowy.
Linia 47. zamknij nawias klamrowy.
Linia 48. zamknij nawias klamrowy.
Linia 50. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 51. string napis znak równości cudzysłów AOAGDNMAOAGUIO cudzysłów średnik.
Linia 52. string wzorzec znak równości cudzysłów AOAG cudzysłów średnik.
Linia 53. wyszukajKMP otwórz nawias okrągły wzorzec przecinek napis zamknij nawias okrągły średnik.
Linia 55. return 0 średnik.
Linia 56. zamknij nawias klamrowy.
31
Ćwiczenie 3
Napisz program, który sprawdzi, czy słowa - elementy tablicy slowa - występują w podanym ciągu znaków tekst. Dla każdego słowa wypisz w osobnej linii TAK, jeśli występuje w tekście choć raz, lub NIE w przeciwnym wypadku.
Specyfikacja:
Dane:
tekst – tekst do przeszukania; ciąg znaków
slowa – tablica wzorców, dla których należy określić czy występują w tekście co najmniej raz czy też nie; tablica ciągów znaków
Wynik:
Dla każdego elementu tablicy slowa, program wypisuje na standardowe wyjście TAK, jeżeli występuje ono w tekście w zmienniej tekst co najmniej raz lub NIE, w przeciwnym razie.
R1aQO4r5SQbQV
Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny.
Linia 3. using namespace std średnik.
Linia 5. void generujTablicePrefiksoSufiksow otwórz nawias okrągły string wzorzec przecinek int tablicaPrefiksoSufiksow otwórz nawias kwadratowy zamknij nawias kwadratowy zamknij nawias okrągły otwórz nawias klamrowy.
Linia 6. int j znak równości 0 średnik.
Linia 7. int i znak równości 1 średnik.
Linia 9. tablicaPrefiksoSufiksow otwórz nawias kwadratowy 0 zamknij nawias kwadratowy znak równości 0 średnik.
Linia 10. while otwórz nawias okrągły i otwórz nawias ostrokątny wzorzec kropka size otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 11. if otwórz nawias okrągły wzorzec otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości znak równości wzorzec otwórz nawias kwadratowy j zamknij nawias kwadratowy zamknij nawias okrągły otwórz nawias klamrowy.
Linia 12. j plus plus średnik.
Linia 13. tablicaPrefiksoSufiksow otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości j średnik.
Linia 14. i plus plus średnik.
Linia 15. zamknij nawias klamrowy else otwórz nawias klamrowy.
Linia 16. if otwórz nawias okrągły j wykrzyknik znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy.
Linia 17. j znak równości tablicaPrefiksoSufiksow otwórz nawias kwadratowy j minus 1 zamknij nawias kwadratowy średnik.
Linia 18. zamknij nawias klamrowy else otwórz nawias klamrowy.
Linia 19. tablicaPrefiksoSufiksow otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości j średnik.
Linia 20. i plus plus średnik.
Linia 21. zamknij nawias klamrowy.
Linia 22. zamknij nawias klamrowy.
Linia 23. zamknij nawias klamrowy.
Linia 24. zamknij nawias klamrowy.
Linia 26. int wyszukajKMP otwórz nawias okrągły string wzorzec przecinek string napis zamknij nawias okrągły otwórz nawias klamrowy.
Linia 27. int tablicaPrefiksoSufiksow otwórz nawias kwadratowy wzorzec kropka size otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy znak równości otwórz nawias klamrowy zamknij nawias klamrowy średnik.
Linia 28. generujTablicePrefiksoSufiksow otwórz nawias okrągły wzorzec przecinek tablicaPrefiksoSufiksow zamknij nawias okrągły średnik.
Linia 30. int i znak równości 0 przecinek j znak równości 0 średnik.
Linia 32. while otwórz nawias okrągły i otwórz nawias ostrokątny napis kropka size otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 33. if otwórz nawias okrągły wzorzec otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości znak równości napis otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias okrągły otwórz nawias klamrowy.
Linia 34. j plus plus średnik i plus plus średnik.
Linia 35. zamknij nawias klamrowy.
Linia 36. if otwórz nawias okrągły j znak równości znak równości wzorzec kropka size otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 37. prawy ukośnik prawy ukośnik Funkcja zwraca pierwszy napotkany indeks.
Linia 38. return otwórz nawias okrągły i minus j zamknij nawias okrągły średnik.
Linia 39. j znak równości tablicaPrefiksoSufiksow otwórz nawias kwadratowy j minus 1 zamknij nawias kwadratowy średnik.
Linia 40. zamknij nawias klamrowy.
Linia 41. else if otwórz nawias okrągły i otwórz nawias ostrokątny napis kropka size otwórz nawias okrągły zamknij nawias okrągły ampersant ampersant wzorzec otwórz nawias kwadratowy j zamknij nawias kwadratowy wykrzyknik znak równości napis otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias okrągły otwórz nawias klamrowy.
Linia 42. if otwórz nawias okrągły j wykrzyknik znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy.
Linia 43. j znak równości tablicaPrefiksoSufiksow otwórz nawias kwadratowy j minus 1 zamknij nawias kwadratowy średnik.
Linia 44. zamknij nawias klamrowy else otwórz nawias klamrowy.
Linia 45. i plus plus średnik.
Linia 46. zamknij nawias klamrowy.
Linia 47. zamknij nawias klamrowy.
Linia 48. zamknij nawias klamrowy.
Linia 49. return minus 1 średnik.
Linia 50. zamknij nawias klamrowy.
Linia 52. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 54. string slowa otwórz nawias kwadratowy 5 zamknij nawias kwadratowy znak równości otwórz nawias klamrowy.
Linia 55. cudzysłów algorytm cudzysłów przecinek.
Linia 56. cudzysłów metoda cudzysłów przecinek.
Linia 57. cudzysłów mama cudzysłów przecinek.
Linia 58. cudzysłów kajak cudzysłów przecinek.
Linia 59. cudzysłów joanna cudzysłów.
Linia 60. zamknij nawias klamrowy średnik.
Linia 62. string tekst znak równości cudzysłów Lorem ipsum dolor sit amet enim kropka Etiam ullamcorper kropka Suspendisse a pellentesque dui przecinek non felis kropka Maecenas malesuada elit lectus felis przecinek joanna ultricies kropka Curabitur et ligula kropka Ut molestie a przecinek ultricies porta urna kropka Vestibulum metoda volutpat a przecinek convallis ac przecinek laoreet enim kropka Phasellus fermentum in przecinek dolor kropka Pellentesque facilisis kropka Nulla imperdiet sit amet magna kropka Vestibulum dapibus przecinek mauris nec malesuada fames ac turpis velit przecinek rhoncus eu przecinek luctus et interdum adipiscing wisi kropka Aliquam erat ac ipsum kropka Integer aliquam purus kropka Quisque lorem tortor fringilla sed przecinek vestibulum id przecinek eleifend justo vel bibendum sapien massa ac turpis faucibus orci luctus non przecinek consectetuer lobortis quis przecinek varius in przecinek purus kropka Integer ultrices posuere cubilia Curae przecinek Nulla ipsum dolor lacus przecinek suscipit adipiscing kropka Cum sociis natoque penatibus et ultrices volutpat kropka Nullam wisi ultricies a przecinek gravida vitae przecinek dapibus risus ante sodales lectus blandit eu przecinek tempor diam pede cursus vitae przecinek ultricies eu przecinek faucibus quis przecinek porttitor eros cursus lectus przecinek pellentesque eget przecinek bibendum a przecinek gravida ullamcorper quam kropka Nullam mama consectetuer kropka Quisque cursus et przecinek porttitor risus kropka Aliquam sem kropka In hendrerit nulla quam nunc przecinek accumsan congue kropka Lorem ipsum primis in nibh vel risus kropka Sed vel lectus kropka Ut sagittis przecinek ipsum dolor quam kropka cudzysłów średnik.
Linia 64. int rezultat znak równości 0 średnik.
Linia 65. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny 5 średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy.
Linia 66. rezultat znak równości wyszukajKMP otwórz nawias okrągły slowa otwórz nawias kwadratowy i zamknij nawias kwadratowy przecinek tekst zamknij nawias okrągły średnik.
Linia 67. if otwórz nawias okrągły rezultat zamknij nawias ostrokątny znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy.
Linia 68. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów TAK cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik.
Linia 69. zamknij nawias klamrowy else otwórz nawias klamrowy.
Linia 70. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów NIE cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik.
Linia 71. zamknij nawias klamrowy.
Linia 72. zamknij nawias klamrowy.
Linia 74. return 0 średnik.
Linia 75. zamknij nawias klamrowy.