x-kom hosting

definiowanie słów jako ciągu liter

gol350
utworzono
utworzono

Cześć wszystkim.
Poznałem już parę funkcji w języku C++ i teraz chcę zrobić program.
W programie tym chodzi o to ,że jak wpiszesz do niego jakieś słowo to program ten ma wypisać na ekranie wszystkie
zdania w których znajduje się to słowo.
teraz mam do was pytanko jak zdefiniować "słowo", tak żeby program poznawał ,że pod pojęciem słowa kryje się jakiekolwiek słowo z danego tekstu ???

taxrate
komentarz
komentarz

[quote name='gol350' timestamp='1284900272' post='1089884']
teraz mam do was pytanko jak zdefiniować "słowo", tak żeby program poznawał ,że pod pojęciem słowa kryje się jakiekolwiek słowo z danego tekstu ???
[/quote]
Nie wiem czy dobrze zrozumiałem, ale zapisz słowo jako string. Mając także tekst jako np. tablica stringów - tablica zdań, możesz łatwo sprawdzić: [code]zdanie.find(slowo)[/code]. Zobacz w dok. [url="http://www.cplusplus.com/reference/string/string/find/"]find[/url].
Jeśli o co innego Ci chodzi to opisz proszę dokładniej.

sawak
komentarz
komentarz (edytowane)

Chcesz znaleźć pozycje słów w tekście czy wypisać zdania w których się powtarza?
Zdanie składa się ze słów, znaków interpunkcyjnych i paru śmieci z ascii. Najpierw fajnie byłoby przejść ten tekst i szukać słów(litery i cyfry). Każde słowo spisujesz i kiedy ono się kończy innym znakiem niż litera lub cyfra, wrzucasz to do tablicy albo od razu do drzewa(niżej).
Zrób sobie drzewo binarne, liście będą trzymać samo słowo i dodatkowe informacje które będą Ci potrzebne (ilość wystąpień albo od razu pozycje w tekście..).
Takie drzewo można szybko wyrównać jeśli będziesz z niego intensywnie korzystać, wybierz tablice.. Jeśli jednak nie zależy Ci na efektywności możesz zacząć drzewo bezpośrednio od pierwszego słowa w tekście.
Ed: sekundkę szybszy;p A co do find- chyba nie chcesz marnować czasu maszyny na chodzenie po k razy po tych stringach dla "k" znaków nie tworzących słów?

  • Dobra wypowiedź 1
taxrate
komentarz
komentarz

[quote name='sawak' timestamp='1284926554' post='1090240']
Ed: sekundkę szybszy;p A co do find- chyba nie chcesz marnować czasu maszyny na chodzenie po k razy po tych stringach dla "k" znaków nie tworzących słów?
[/quote]
Założyłem, że autor pytania chciał zrobić coś bardzo prostego :-)

gol350
komentarz
komentarz

Ej ej ,chwileczkę.
Przepraszam , nie napisałem ,że aż tylu funkcji nie znam.
Zresztą chciałbym napisać to jak najprościej.
Może za dużo sobie wyobrażam, ale nie da się prościej.
Napiszcie jakiś przykład, proszę.

taxrate
komentarz
komentarz

[quote name='gol350' timestamp='1285347421' post='1092515']
Napiszcie jakiś przykład, proszę.
[/quote]
Oczywiście, tylko opisz dokładniej co chcesz zrobić. Wiemy tylko, że program ma wczytywać słowo, a zdania skąd są? Czy chodzi o jakiś tekst, który masz dopiero podzielić na zdania?

gol350
komentarz
komentarz

[quote name='taxrate' timestamp='1285360318' post='1092668']
Oczywiście, tylko opisz dokładniej co chcesz zrobić. Wiemy tylko, że program ma wczytywać słowo, a zdania skąd są? Czy chodzi o jakiś tekst, który masz dopiero podzielić na zdania?
[/quote]

Właśnie chodzi mi o jakiś tekst ,który chciałbym załączyć do programu (nie wiem jak to się robi -może w jakimś pliku, czy coś) i chcę ,żeby program wybierał z tego tekstu dowolne słowo które zostało wpisane do programu no i na koniec łączył je ze zdaniem w którym znajduje się to słowo i cytował mi to zdanie na ekranie.
Myślałem coś na zasadzie , gdyby była jakaś funkcja ,która zauważa ciąg liter od kropki-"." do kropki- "."

taxrate
komentarz
komentarz

[quote name='gol350' timestamp='1285522890' post='1093663']
Właśnie chodzi mi o jakiś tekst ,który chciałbym załączyć do programu (nie wiem jak to się robi -może w jakimś pliku, czy coś) i chcę ,żeby program wybierał z tego tekstu dowolne słowo które zostało wpisane do programu no i na koniec łączył je ze zdaniem w którym znajduje się to słowo i cytował mi to zdanie na ekranie.
Myślałem coś na zasadzie , gdyby była jakaś funkcja ,która zauważa ciąg liter od kropki-"." do kropki- "."
[/quote]
No tak, możesz najpierw podzielić tekst na zdania od kropki do kropki. W necie jest kilka rozwiązań, np. [url="http://www.infernodevelopment.com/perfect-c-string-explode-split"]to tutaj[/url]. Otrzymasz vector stringów, i możesz potem iteracyjnie przeszukać go, robiąc find dla każdego z nich stwierdzając czy jest w nim Twoje słowo.
- Pamiętaj, że podział na zdania metodą od kropki do kropki to bardzo grube przybliżenie, ale dokładny podział jest na razie niewykonalny.
- Być może nie chcesz znajdywać zdań w których Twoje słowo występuje tylko jako część pewnego słowa, wtedy trzeba by podzielić jeszcze każde zdanie na słowa (spójne ciągi liter) i wyszukiwać po słowach.
- Jest jeszcze parę innych dylematów jak np. duże/małe litery.
- Gdyby interesowało Cię szybsze rozwiązanie (lepsze niż liniowe) to też można tylko to znacznie trudniejsze.

  • Dobra wypowiedź 1
pawelski
komentarz
komentarz

Tą znajomością funkcji mnie rozbawiłeś! Ile masz lat? Ale do rzeczy. Określ gramatykę (jak nie wiesz ocb, poczytaj o CFG(context-free grammar(tudzież gramatyka bezkontekstowa- przecież nie musisz wnioskować na podstawie tego tekstu.))).
Drugie co, odwołania do funkcji kosztują czas. Gdzie tylko możesz- wyzbądź się rekursji i ograniczaj wywołania do funkcji(no chyba że masz tak demona predkości pod nadgarstkami i nie zależy Ci na wydajności.. no ale też bez przesady, nie wszędzie to podejście się opłaca).
Trzecie co, budowa drzewa to pare minut pisania(no chyba, że piszesz je w c-stylu i nie masz w tym wprawy(powodzenia ze wskaźnikami i kontrolą pamięci:P)), a oszczędza czas (i nerwy na testach).
Czwarte co, uparłeś się na to c++? Zapomnij coś zwolnić w destruktorze!(:P). Zastanów się nad c#(podobne?)- obiektowe i z garbage collector'em.

A poza tym- jak pisał sawak, użycie find'a tutaj nie jest zbyt przemyślanym posunięciem.

Reasumując- jeśli upierasz się na c++- zdefiniuj klasę obsługi drzew, albo w c (http://cslibrary.stanford.edu/110/BinaryTrees.html - tutaj przykład), tylko znajdź coś do kontroli pamięci(coś pokroju 'electric fence'?).

Phi.

  • Dobra wypowiedź 1
gol350
komentarz
komentarz

[quote name='pawelski' timestamp='1285618208' post='1094262']
Tą znajomością funkcji mnie rozbawiłeś! Ile masz lat? Ale do rzeczy. Określ gramatykę (jak nie wiesz ocb, poczytaj o CFG(context-free grammar(tudzież gramatyka bezkontekstowa- przecież nie musisz wnioskować na podstawie tego tekstu.))).
Drugie co, odwołania do funkcji kosztują czas. Gdzie tylko możesz- wyzbądź się rekursji i ograniczaj wywołania do funkcji(no chyba że masz tak demona predkości pod nadgarstkami i nie zależy Ci na wydajności.. no ale też bez przesady, nie wszędzie to podejście się opłaca).
Trzecie co, budowa drzewa to pare minut pisania(no chyba, że piszesz je w c-stylu i nie masz w tym wprawy(powodzenia ze wskaźnikami i kontrolą pamięci:P)), a oszczędza czas (i nerwy na testach).
Czwarte co, uparłeś się na to c++? Zapomnij coś zwolnić w destruktorze!(:P). Zastanów się nad c#(podobne?)- obiektowe i z garbage collector'em.

A poza tym- jak pisał sawak, użycie find'a tutaj nie jest zbyt przemyślanym posunięciem.

Reasumując- jeśli upierasz się na c++- zdefiniuj klasę obsługi drzew, albo w c (http://cslibrary.stanford.edu/110/BinaryTrees.html - tutaj przykład), tylko znajdź coś do kontroli pamięci(coś pokroju 'electric fence'?).

Phi.
[/quote]


Mam pytanie
Podajcie jakiś prosty przykład programu w którym jest drzewo binarne ? Jakiś bez zbędnego gmatwania. Prosze!!!
Tylko chodzi mi o to ,że jak wpisze w tym programie kod jednego z liści, to żeby program wyświetlał słowo z liścia ,z którego został wpisany kod.

pawelski
komentarz
komentarz

http://www.java2s.com/Code/C/Data-Structure-Algorithm/Displaysabinarytree.htm masz tu w ansi c. Przez dwa tygodnie nie zrobiłeś nic żeby ogarnąć temat więc albo jaja sobie robisz(i gdzie mod?!) albo..

Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!

Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Strona wykorzystuje pliki cookies w celu prawidłowego świadczenia usług i wygody użytkowników. Warunki przechowywania i dostępu do plików cookies możesz zmienić w ustawieniach przeglądarki.