Tengo que realizar un programa en C++ en el que se lee un archivo de texto.txt y de él se extraen una serie de palabras marcadas y las líneas en la que se encuentra, para hacer un índice con las mismas.
Hasta ahora tengo hecho el código para abrir el archivo y leer cada una de las palabras de forma independiente, situando cada una de ellas en lalínea que le toca, es decir tengo tanto las palabras como las líneas. El rpoblema viene a la hora de generar el índice.
Para ello tengo que generar por obligación 2 clases:
Clase ListaIndice
Clase ListaIndice. Para representar la lista del índice, en la que cada nodo debe contener una palabra y una lista ordenada de líneas, utilizaremos el contenedor asociativo map. Este contenedor nos permite relacionar de forma unívoca elementos de tipos distintos, en este caso la palabra y la lista de líneas, ordenar por la palabra y además solo permite
una aparición de cada elemento clave. Este es nuestro caso, ya que por cada palabra solo podemos tener una única entrada en el índice. Concretamente, nuestra clase ListaIndice tendrá los atributos privados:
TListaOrd laLista
Donde TListaOrd se define previamente en el mismo módulo como:
typedef map< string, NodoIndice*, less<string> > TListaOrd;
TListaOrd::iterator iter-lista
Y métodos públicos:
- void limpiar(), para vaciar el contenedor.
- void insertar(string palabra, int unaLinea), para insertar un nuevo nodo en la lista.
- string leerPalabra(), que devuelve la palabra correspondiente al nodo de la lista apuntado por el iterador iter_lista.
- string leerLineas(), que devuelve la lista de lineas de un nodo como unacadena.
- void iniciar(), que coloca el iterador iter_lista al comienzo de la lista.
- void avanzar(), que hace que el iterador iter_lista avance un nodo.
- bool estaDentro(), que comprueba que el iterador iter_lista este dentro delos límites de la lista
Clase NodoIndice
La clase NodoIndice que representa la lista de líneas que se asocia con cada palabra del índice. Esta clase posee un atributo privado:
TListaLineas listaLineas;
habiéndose definido previamente en el mismo modulo la clase TListaLinea mediante el contenedor de secuencia set
:
typedef set< int, less<int> > TListaLineas;
Esto nos permite guardar el conjunto de enteros que representan las líneas de forma ordenada y sin repeticiones. La clase consta de los siguientes métodos:
- NodoIndice(int unaLinea), que crea un nuevo nodo con una sola línea.
- ~NodoIndice(), destructor de la clase.
- void insertaLinea(int unaLinea), que inserta una nueva línea en un nodo ya creado.
- string recuperaLineas() que devuelve una cadena formada por la secuencia de líneas separadas por blancos.
Si alguien pudiera orientarme con el código estaría muy agradecido.
Un saludo