Qué maravilloso mundo, archivos en C++

Publicado por Cristian Olaz
hace 6 años

Este es un ejemplo muy sencillo sobre el manejo de archivos en C++. Generalmente estos ejemplos son aburridos así que traté de hacerle algo intersante. Lo que vemos aquí es un programa que nos mostrará una frase “al azar” de la bonita canción What a wonderful world de Louis Armstrong. Ver vídeo:

What a wonderful world by Louis Armstrong

Bien, ¿Cómo lo haremos?, Simple. Primero tenemos que leer un archivo de texto en el que guardaremos la letra de esta canción. Para esto usaremos la clase fstream, estándar de C++. Luego leemos el archivo línea por línea y las vamos almacenamos en un array, que será una instancia de la clase vector. Por último mostraremos una línea al azar dentro de ese array, y esto lo haremos con la función rand.

Veamos el código. Está comentado para que se entienda mejor:

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <vector>
using namespace std;

class Frases{
    private:
        fstream _archivo;

        // array en el que guardaremos las frases del archivo
        vector<string> _frases;

    public:

        // Constructor
        Frases(){
            // Se inicializa la función para obtener
            // números aleatorios
            srand(time(NULL));
        }

        // Método set_archivo
        void set_archivo(string nombre_archivo){
            // se abre el archivo
            _archivo.open(nombre_archivo.c_str(), fstream::in);
            string linea;
            // leer el archivo línea a línea
            while(getline(_archivo, linea)){
                // guardar la línea actual en el array
                _frases.push_back(linea);
            }
        }

        // Método get_frase
        string get_frase(){
            // obtener un número aleatorio que sea menor al
            // tamaño del array con frases.
            int numero_aleatorio = rand() % _frases.size();
            // devolver la frase ubicada en la posición aleatoria
            return _frases[numero_aleatorio];
        }

        // Destructor
        ~Frases(){
            // cerrar el archivo
            _archivo.close();
        }
};

int main()
{
    // se declara una instancia de la clase
    Frases frases;
    // se establece el archivo de frases
    frases.set_archivo("frases.txt");
    // mostrar una frase aleatoria.
    cout << frases.get_frase() << endl << endl;
    return 0;
}

Ahora simplemente tenemos que crear un archivo en el mismo directorio donde compilamos el programa y lo nombramos "frases.txt". Dentro de este archivo pondremos la letra de la canción:

I see trees of green, red roses too I see them bloom for me and you And I think to myself, what a wonderful world I see skies of blue and clouds of white The bright blessed day, the dark sacred night And I think to myself, what a wonderful world The colours of the rainbow, so pretty in the sky Are also on the faces of people going by I see friends shakin’ hands, sayin’ “How do you do?” They’re really saying “I love you” I hear babies cryin’, I watch them grow They’ll learn much more than I’ll ever know And I think to myself, what a wonderful world Yes, I think to myself, what a wonderful world Oh yeah

Ahora cada vez que ejecutemos nuestro programa nos tirará una frase “al azar” de What a wonderful world. Es un ejemplo muy sencillo sobre el manejo de archivos en C++, y en base a esto pueden hacer aplicaciones más detalladas.

Respuesta de Daphnes Nohansen Hyrule
hace 6 años

hehe, bonita programacion poetica n_n, a eso le llamo hacer un programa que alimenta el espiritu de otros :3

Respuesta de Nick
hace 6 años

excelente ejemplo!