Ślad: • 01_zad_slownik

Słownik

Writing /home/grochu/public_html/wiki/data/cache/a/afade11a860e230e8674dec5afaafc4f.i failed
Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.
Writing /home/grochu/public_html/wiki/data/meta/zajecia/po_2025_1/01_zad_slownik.meta failed
Unable to save metadata file. Hint: disk full; file permissions; safe_mode setting.
Writing /home/grochu/public_html/wiki/data/cache/8/8916a6e99403eb4ad7c3a40eff5cb4b5.i failed
Writing /home/grochu/public_html/wiki/data/cache/8/8916a6e99403eb4ad7c3a40eff5cb4b5.metadata failed
Writing /home/grochu/public_html/wiki/data/cache/a/afade11a860e230e8674dec5afaafc4f.i failed
Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.
Writing /home/grochu/public_html/wiki/data/cache/0/0e7848e65387fa57e04379a02acdbf0a.xhtml failed

Napisz program generujący słownik wyrazów zawartych w dowolnym pliku tekstowym. Dla podanego pliku (lub po wczytaniu tekstu ze strumienia wejściowego) program wyświetla posortowaną alfabetycznie listę występujących w tekście wyrazów oraz liczbę wytapiań danego wyrazu w tekście.

Przykładowe wyjście programu:

ala      5
kota     2
ma       1

Duże i małe znaki są nierozróżnialne - słownik wypisuje wyłącznie słowa pisane małymi literami

Zakładamy, że: pojedyncze słowo to dowolny ciąg znaków alfabetycznych (wyłącznie litery [a-zA-Z]). Wszystkie pozostałe znaki są separatorami wyrazów.

Dla ułatwienia można zaimplementować funkcję getword, która pobiera kolejne słowo ze strumienia (wejściowego, z pliku). Funkcja wczytuje do tablicy pierwsze napotkane w strumieniu słowo (po pominięciu wszystkich początkowych znaków które nie są literami) i zwraca wartość sygnalizującą czy słowo zostało wczytane (np. może zwracać długość słowa gdzie wartość 0 zwracana jest w przypadku dotarcia do końca strumienia w którym nie wystąpiło już żadne słowo).

Słownik generowany jest w oparciu o drzewo binarne.

Utwórz projekt w środowisku VisualStudio, dodaj do niego plik nagłówkowy slownik.h zawierający deklarację funkcji obsługi drzewa oraz plik źródłowy słownik.c z definicjami tych funkcji.
Przykładowa zawartość pliku slownik.h:

struct tree
{
    char *word;
    int count;
    struct tree *left, *right; 
};
 
struct tree* add(struct tree *d,char *word);
void print(struct tree *d);

Funkcja add(struct tree *d,char word)* dodaje nowe słowo do słownika (drzewa). Wartością zwracaną jest wskaźnik do bieżącego węzła w drzewie. Słowo umieszczane jest w drzewie zależnie od kolejności słownikowej (alfabetycznej).
*Algorytm dodawania słowa*
*Dane:* węzeł d i napis s
- jeżeli d jest pusty utwórz nowy węzeł zawierający słowo s, ustaw licznik na 1 i idź do kroku 5 - jeżeli słowo zawarte w węźle d jest takie samo jak s to zwiększ licznik i idź do kroku 5 - jeżeli słowo zawarte w węźle d powinno stać dalej w słowniku niż s to dodaj słowo w lewej podgałęzi i idź do kroku 5 - dodaj słowo s do prawej podgałęzi - zwróć d Funkcja **print(struct tree d)* wypisuje zawartość słownika, czyli posortowaną listę słów wraz z liczbą wystąpień danego słowa w pliku.
* Dopisz definicje funkcji *add* i *print* w pliku źródłowym *slownik.c* * Program niech pobiera plik wejściowy jako argument wywołania aplikacji, jeżeli argumentu brakuje wówczas czytany jest tekst ze standardowego wejścia slownik.exe plik_tekstowy

Jakiej ważnej funkcji brakuje w pliku slownik.h ?
Zaimplementuj ją.

Przydatne funkcje: * *string.h* : *strcpy*, *strcmp*, *strlen*, *strdup* * *ctype.h* : *isalpha*, *tolower* ===== Różnice miedzy C i C===== * Zamień rozszerzenia nazw plików *.c -> *.cpp * Zamień wywołania funkcji ''malloc()'' i ''free()'' na wywołania operatorów ''new'' i ''delete'' * Spróbuj użyć strumieni ''[[http://www.cplusplus.com/reference/iostream/

  * [[wp>C_standard_library|C standard library]]
  * [[wp>C%2B%2B_Standard_Library|C++ Standard_Library]]
* Struktura w C++ jest klasą, usuń zbędne słowo kluczowe ''struct'' przy deklaracjach zmiennych typu ''drzewo'' lub uczyń węzeł drzewa klasą.
* Użyj referencji zamiast wskaźników tam gdzie uznasz to za stosowane
* Utwórz klasę "slownik", korzeń drzewa uczyń polem prywatnym zaś funkcje ''dodaj()'' i ''wyswietl()'' przepisz jako metody publiczne tej klasy  (Zobacz zadanie [[zajecia2#Słownik|Słownik obiektowo]])