Problema con programa

Iniciado por lionheart23, 25 Abril 2014, 10:36 AM

0 Miembros y 1 Visitante están viendo este tema.

lionheart23

Tengo el siguiente codigo en C++

list<string> Libro::leer()
{
list<string> palabras;
cin >> ISBN;
cin >> ao;
cin >> Ncap;
cin.get(); //Para quitar de la entrada el salto de linea
getline(cin,Titulo);
getline(cin,Autores);
palabras.push_back(Titulo);
aparicion ap;
contCapitulos=1;
contParrafos=1;
Libro lib = *this;
int y = ap.leerAparicion(lib,contCapitulos,contParrafos);
int u;

NPar = 1;
if (y==0) NPalabras = 1;
else NPalabras = 0;
while(y!=1){
u = y;
y = ap.leerAparicion(lib,contCapitulos,contParrafos);
palabras.push_back(ap.getPalabra());
if (y==0) NPalabras++;
else if ((y==2) && (y!=u)) {aumentaParrafos(); NPar++;}
else if (y==3) { aumentaCapitulos();
reinicioParrafos();
if (u!=2) NPar++;}
}
if (u==2) NPar--;

return palabras;
}


Y la clase aparicion esta definida asi:

string siguienteLetra()
{
unsigned int str; //Int donde estara el valor entero de la letra
string letra;
str = cin.get(); //con cin.get() vamos obteniendo las letras de 1 en 1.
if (cin.eof()) return "-";
if (str == 32) {
return " ";

}
else if ((str >= 65) && str <= 90)
{
str = tolower(str);
letra = (char)str;
return letra;
}
else if (str == 195)
{
str = cin.get();
switch (str)
{
case 161: return "a";
break;
case 177: return "ñ";
break;
case 169: return "e";
break;
case 186: return "u";
break;
case 173: return "i";
break;
case 179: return "o";
break;
case 188: return "u";
break;
case 129: return "a";
break;
case 137: return "e";
break;
case 141: return "i";
break;
case 147: return "o";
break;
case 154: return "u";
break;
case 156: return "u" ;
break;
case 145 : return "ñ";
break;
default: return " ";
}
}
else if (str == 10) {
letra = "\n";
return letra;}
else if (str >= 97 && str <= 122) { letra =(char)str; return letra;}
else return " ";


}

string siguientePalabra(int j){

string palabra;
int i = 0;
j= 0;
palabra = siguienteLetra();
bool continuacion;

while(palabra.at(i) == ' ') {palabra=siguienteLetra();}

if (palabra.at(i) == '\n'){ continuacion = false;}
else if (palabra.at(i) == '-'){ continuacion = false;return "-";}
else continuacion = true;
while (continuacion){

string c= siguienteLetra();

while(c.at(0) == ' '){
j=1;
c=siguienteLetra();
}

if (c.at(0) == '\n'){ continuacion = false;}
else if (j==1) {cin.putback(c.at(0)); continuacion=false;}
else palabra = palabra + c;
}

return palabra;

}

int aparicion::leerAparicion(Libro &lib, int cap, int par)
{
libro = lib;
capitulo = cap;
parrafo = par;
int j=0;
palabra = siguientePalabra(j);
while(palabra.at(0) == ' ') palabra = siguientePalabra(j);   
if (palabra.at(0) == '\n' && j==0) return 2;
else if (palabra == "findecapitulo") {
if (cap == libro.getNcap()) return 1;
return 3;
}
else if (palabra.at(0) == '-') return 1;
else {return 0; }

}


El problema esta, en que cuando ejecuto me da un error pero si quito el echo de que en leer(en el primero) intente almacenar las apariciones en una lista ese error no aparece, por lo que quería saber si alguno sabría a que se debe que de error al intentar almacenar las palabras.

eferion

edita tu mensaje... decora el código con las etiquetas GeSHi y luego empezamos a hablar