Por favor, alguien sabe por qué pasa??es urgente!!!

Patri
20 de Enero del 2004
Hola!!Estoy estudiando telematica y me han pedido un proyecto q se basa en ficheros,estoy de los nervios porq no m sale y se me acaba el tiempo, tengo echa una parte pero hay un problema, me lee todos los ficheros menos uno...y de los q me lee solo me lee enteros 3, los otros 5 lee solo un trozo...aki va el programa, por favor si alguien sabe por que es que me lo diga escribiendome a: [email protected]
Por cierto es en c++.

#include <iostream.h>
#include <stdlib.h>
#include <fstream.h>
#include <string>
#include <ctype.h>

void ProcesarCuento (string &palabra, int &tam);
void ModificarPalabra (string &palabra, int &tam);
void QuitarAcentos (string &palabra, int &tam);


int main()
{
ofstream indice;
ifstream lista, cuento;
string NombreCuento, palabra;
int tam;

indice.open("c:\tmp\indice.txt");
if(!indice)
cout << "Error al abrir el ficheron";
else
{
lista.open("c:\tmp\lista.dat");
if(!lista)
cout << "Error al abrir el fichero2n";
else
{
while (lista >> NombreCuento)
{
cuento.open(NombreCuento.c_str());
cout << "n El fichero leido es: " << NombreCuento << endl;
if(!cuento)
cout << "Error al abrir el fichero3n";
else
{
while (cuento >> palabra)
{
tam = palabra.length();
ProcesarCuento (palabra, tam);
ModificarPalabra (palabra, tam);
QuitarAcentos (palabra, tam);
cout << palabra;
indice << palabra;
}
cuento.close();
}
}
lista.close();
}
}
indice.close();

system("PAUSE");
return 0;
}
void ProcesarCuento (string &palabra, int &tam)
{
int i;

for (i=0; i<tam; i++)
palabra[i] = toupper(palabra[i]);

return;
}
void ModificarPalabra (string &palabra, int &tam)
{
int i;

for (i=0; i<tam; i++)
{
if(int(palabra[i]) >= 33 && int(palabra[i]) <= 47)
{
palabra.erase(i,1);
}
if(palabra[i] == '?')
{
palabra.erase(i,1);
}
if(palabra[i] == '¿')
{
palabra.erase(i,1);
}
if(palabra[i] == ':')
{
palabra.erase(i,1);
}
if(palabra[i] == ';')
{
palabra.erase(i,1);
}
}
}
void QuitarAcentos (string &palabra, int &tam)
{
int i;
for(i=0; i<tam; i++)
{
if(palabra[i] == 'á')
{
palabra[i] = 'Á';
}
if(palabra[i] == 'é')
{
palabra[i] = 'É';
}
if(palabra[i] == 'í')
{
palabra[i] = 'Í';
}
if(palabra[i] == 'ó')
{
palabra[i] = 'Ó';
}
if(palabra[i] == 'ú')
{
palabra[i] = 'Ú';
}
if(palabra[i] == 'ü')
{
palabra[i] = 'Ü';
}
if(palabra[i] == 'ñ')
{
palabra[i] = 'Ñ';
}
}
}

Si se anula la función ModificarPalabra ocurre lo que he dicho antes
sino lo q sale son solo dos cuentos y a medias, los ficheros de los cuentos los podeis encontrar en: http://informatica.uv.es/docencia/iiguia/asignatu/...
asi como el enunciado de la practica, se llama proyecto final.
y el fichero list.dat lo teneis q crear tb, escribiendo dentro los nombres de los cuentos, como explica en el enunciado.
Muchas gracias!!!!!

Me contestaron el otro dia y me dijeron q es por falta de memoria, pero porque ocurre eso??se puede solucionar?? tiene algún otro error?? Por favor, es urgente...

igno
20 de Enero del 2004
Hola!, si acaso es por falta de memoria puedes intentar esto:

Options > Compiler > Code Generation
donde dice Model escoge Huge

y en Options > Debugger
donde dice Program Heap Size ponle 640
espero que con eso puedas aumentar la memoria

suerte!

chuidiang
20 de Enero del 2004
No puedo ver los cuentos porque no me da acceso (dice que no tengo permisos para acceder a ese servidor).

Detalla un poco más que es lo que no sale.

¿Son cuentos muy grandes y no salen los que no salen son los más grandes de todos y salen enteros los más pequeños?. Si no es así, no creo que sea problema de memoria.

¿Lo que no salen son las últimas palabras del cuento?. Si es así, prueba a poner un cout << endl; cuando termines de procesar un cuento.

Otro posible problema es que en ModificarPalabra haces un for para la longitud de la palabra, pero dentro del bucle borras caracteres de la palabra. Los últimos indices se "sandrán" de rango. No sé si la clase string contempla ese caso o te puede dar problemas.

Se bueno.