Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Duda programa C++ clases

Estas en el tema de Duda programa C++ clases en el foro de C/C++ en Foros del Web. Buenas tardes. Tengo que realizar un programa en C++ en el que se lee un archivo de texto.txt y de él se extraen una serie ...
  #1 (permalink)  
Antiguo 13/05/2015, 10:14
 
Fecha de Ingreso: enero-2015
Mensajes: 2
Antigüedad: 9 años, 2 meses
Puntos: 0
Duda programa C++ clases

Buenas tardes.
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
  #2 (permalink)  
Antiguo 14/05/2015, 09:18
 
Fecha de Ingreso: enero-2015
Mensajes: 2
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Duda programa C++ clases

Os dejo el códig que tengo escrito aceptando posibles modificaciones.Gracias!!!
typedef set< int, less<int> > TListaLineas;
class NodoIndice
{
private:
TListaLineas listaLineas;
public:
NodoIndice(int unaLinea);//que crea un nuevo nodo con una sola linea.
~NodoIndice();//destructor de la clase.
void insertaLinea(int unaLinea);//que inserta una nueva linea en un nodo ya creado.
string recuperaLineas();// que devuelve una cadena formada por la secuencia de lineas separadas por blancos.
};

//Implementación de métodos de la clase NodoIndice
NodoIndice::NodoIndice(int unaLinea)//que crea un nuevo nodo con una sola linea.
{
listaLineas.insert(unaLinea);
}
NodoIndice::~NodoIndice()//destructor de la clase.
{
//listaLineas.clear();
}
void NodoIndice::insertaLinea(int unaLinea)//que inserta una nueva linea en un nodo ya creado.
{

listaLineas.insert(unaLinea);



}
string NodoIndice::recuperaLineas()// que devuelve una cadena formada por la secuencia de lineas separadas por blancos.
{
TListaLineas::iterator listaiter;
string textolineas;
string textolineasaux;
for(listaiter=listaLineas.begin();listaiter!=lista Lineas.end();listaiter++)
{
textolineasaux=*listaiter;
textolineas.append(textolineasaux);
cout<<textolineas;
}
return textolineas;
}






typedef map<string, NodoIndice*, less<string> > TListaOrd;
class ListaIndice
{
private:
TListaOrd laLista;
TListaOrd::iterator iter_lista;

public:
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 una cadena.
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 limites de la lista.
};

//Implementación de métodos de la clase ListaIndice
void ListaIndice::limpiar()//para vaciar el contenedor
{
laLista.clear();
}
void ListaIndice::insertar(string palabra, int unaLinea)//para insertar un nuevo nodo en la lista
{
cout<<"linea "<<unaLinea<<endl;

NodoIndice *Nodo;
Nodo=new NodoIndice(unaLinea);
Nodo->insertaLinea(unaLinea);
laLista.insert(TListaOrd::value_type(palabra,Nodo) );

}
string ListaIndice::leerPalabra()//que devuelve la palabra correspondiente al nodo de la lista apuntado por el iterador iterlista.
{
string palabraaux;
palabraaux=iter_lista->first;
return palabraaux;
}
string ListaIndice::leerLineas()// que devuelve la lista de lineas de un nodo como una cadena.
{
return iter_lista->second->recuperaLineas();
}
void ListaIndice::iniciar()//que coloca el iterador iter lista al comienzo de la lista.
{
iter_lista=laLista.begin();
}
void ListaIndice::avanzar()//que hace que el iterador iter lista avance un nodo.
{
iter_lista++;
}
bool ListaIndice::estaDentro()//que comprueba que el iterador iter lista este dentro de los limites de la lista.
{
bool comprobacion;
comprobacion=0;
if(iter_lista!=laLista.end())
{
comprobacion=1;
};
return comprobacion;
}

Etiquetas: clase, contenedor, map, set
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:21.