[C++] Error con ficheros.

Iniciado por Zodiak98, 26 Noviembre 2016, 19:21 PM

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

Zodiak98

Verán, estoy haciendo un programa simple que lee desde un archivo, el trabajo del programa es sustituir cada espacio en blanco por un guión bajo.

El programa ya está hecho (más o menos), la cosa es que, no me da ningún tipo de error sino que se crashea y deja de funcionar en su ejecución.

Acá el código que llevo hasta ahora:
Código (cpp) [Seleccionar]

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

//Función que devuelve una línea con cada espacio en blanco con un guión bajo
string reemplazar(string linea);

int main() {
    //Creación del archivo.
    fstream archivo("archivo.txt", ios::in | ios::out);
    //Variable para almacenar cada línea del archivo.
    string linea;
    //Variable para reemplazar todo lo que está en el archivo.
    string dArchivo = "";

    //Comprobando que el archivo exista.
    if(!archivo) {
        cerr << "Error: El archivo no existe." << endl;
        return -1;
    }

    //Leyendo cada línea del fichero.
    while(!archivo.eof()) {
        //Obteniendo línea por línea desde el archivo.
        getline(archivo, linea);

        //Almacenando las líneas con los guiones bajos ya reemplazados.
        dArchivo += reemplazar(linea) + "\n";
    }

    //Sobreescribiendo el archivo con los guiones bajos ya establecidos.
    archivo << dArchivo;

    //Cerrando el archivo.
    archivo.close();

    return 0;
}

//Implementando el método para reemplazar los espacios en blanco por un guión bajo.
string reemplazar(string linea) {
    //Nueva línea
    string nLinea = "";

    //Sustituyendo cada espacio en blanco con un guión bajo.
    for(unsigned int h = 0; h < linea.length(); h++) {
        if(linea[h] == ' ') {
            nLinea[h] += '_';
        } else {
            nLinea[h] += linea[h];
        }
    }

    return nLinea;
}

ivancea96

Código (cpp) [Seleccionar]
string reemplazar(string linea) {
   //Nueva línea
   string nLinea = "";

   //Sustituyendo cada espacio en blanco con un guión bajo.
   for(unsigned int h = 0; h < linea.length(); h++) {
       if(linea[h] == ' ') {
           nLinea[h] += '_';
       } else {
           nLinea[h] += linea[h];
       }
   }

   return nLinea;
}


Código (cpp) [Seleccionar]
nLinea[h] += '_';
Ahí no le estás agregando el caracter a la cadena. Ahí le estás sumando '_' (su valor ascii) al caracter en la posición h (inexistente, de ahí el error).
Querrías poner:
Código (cpp) [Seleccionar]
nLinea += '_';