Indexarea cuvintelor

Se consideră un fişier text (cu extensia .txt sau fără extensie) care conţine cuvine separate prin caracterele speciale din tabloul delim[]=" .,:;-\n/". Indexarea presupune extragerea cuvintelor cu lungimea cuprinsă între m şi n, având cel puţin p apariţii şi plasarea acestora într-un fişier binar. Un articol din fişierul binar va conţine unrmatoarele informaţii asupra unui cuvânt extras:

  • l

        \[\rightarrow\]

    lungimea cuvântului (natural), m <= l <= n <= 15.

  • cuv

        \[\rightarrow\]

    tabloul conţinând cuvântul extras (tablou de maxim 15 caractere).

  • freq

        \[\rightarrow\]

    numărul de apariţii a cuvântului (natural), freq >= p.

Programul se va lansa în execuţie cu comandă: index cuvinte.txt n m p. Fişierul binar creat va avea acelaşi nume că şi fişierul text, dar cu extensia .idx.

Indicaţie: Deoarece numărul de apariţii al unui cuvânt este cunoscut numai după citirea întregului fişier, care, în mod categorit, nu va putea fi păstrat în memorie, vom folosi două fişiere ajutătoare, f1 şi f2. În f1 se vor scrie articole de formă:

struct art_cuv {
    int l;         /* lungime cuvânt */
    char cuv[15];
}; /* cuvânt extras */

Fiecare cuvânt din f1 este căutat în fişierul f2. Dacă se află acolo înseamnă că a fost prelucrat şi se trece mai departe; în caz contrar, se numără apariţiile cuvântului în f1 şi se scrie în f2, împreună cu numărul de apariţii, freq. În final, se scot din fişierul f2 toate articolele, se ignoră articolele cu mai puţin de p apariţii, iar celelalte se scriu în fişierul de iesiere.