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:
#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;
}
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;
}
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:
nLinea += '_';