Autor Tema: Funciones C++, split dividir por un caracter separador, leer archivos cplusplus  (Leído 17113 veces)

Príncipe_Azul

  • Principiante
  • **
  • Mensajes: 72
    • Ver Perfil
    • Foro ArgentinaIRC - Ayuda de Programación General, IRC y mIRC Scripting!
Hola compañeros!!!

Bueno quiero agradacerles nuevamente y felicitarlos por el saludo y la educación que siempre tienen, me encanta leer ese "Hola" al comienzo de cada mensaje de su primer mensaje en un tema, nunca pierdan eso, demuestren educación y respeto así como lo hacen, porque hay tipos como yo que observan bien esas cosas.

Bueno voy a dejar una librería, es algo simple que hice en C++, digamos que lo mejor que he hecho, pero nunca la he terminado, yo quería que fuese una librería con muchas o varias funciones, como métodos digamos, pero ya abandoné C++, es un gran labor remar con eso y además no pretendo hacer programas y menos trabajar ($$$$) con C++.

Esta librería tiene una explicación y varios ejemplos de cada función.

Primero cargamos la librería:

Código: [Seleccionar]
#include "Funciones.h"

se llama así Funciones.h

y aquí dejo el código:

Código: [Seleccionar]
#include <iostream>
#include <windows.h>
#include <vector>
#include <stdio.h>
#include <fstream>

using namespace std;

int Cuenta(string s, const char Separadorr, int &TotalChars) {
    for (int i = 0; i < s.size(); i++)
        if (s[i] == Separadorr) TotalChars++;
}

void split(string Linea, char Separador, vector<string> &TempBuff, int &TotalVector) {
    TempBuff.resize(0);
    TotalVector = 0;
    int Nums = -1;
    int NumPos = -1;
    int ValorNum = 0;
    int TotalChars = 0;
    int TotalEspacios = Linea.length();
    string Valor;
    Cuenta(Linea, Separador, TotalChars);
    if (TotalChars != 0) {
        while (Nums < TotalChars) {
            Nums++;
            ValorNum = Linea.find(Separador, NumPos + 1);
            Valor = Linea.substr(NumPos + 1,ValorNum);
            Valor = Valor.substr(0, Valor.find_first_of(Separador));
            TempBuff.push_back(Valor);
            NumPos = ValorNum;
            TotalEspacios++;
        }
        TotalVector = TempBuff.size();
    }
    else {
        //TempBuff.push_back(Linea.substr(0, Linea.find_first_of(Separador)));
        TotalVector = 0;
    }
}

void Contar(string &Cadena, const char Caracter, int &NumChars) {
    NumChars = 0;
    for(int IncNums = 0; IncNums <= Cadena.size(); IncNums++) {
        if (Cadena[IncNums] == Caracter) NumChars++;
    }
}

void Multi(string &Texto, int TotalRep) {
    string Texto2 = Texto;
    for(int SumaNums = 1; SumaNums < TotalRep; SumaNums++) {
        Texto += Texto2;
    }
}

void LeeLinea(const char *NombreArchivo, string &DatoLinea, int NumLinea) {
    char Linea[1280];
    ifstream Lectura(NombreArchivo);
    Lectura.getline(Linea, 1280);
    int CuentaNum = 1;
    while (!Lectura.eof()) {
        if (CuentaNum == NumLinea) {
            DatoLinea = Linea;
            Lectura.close();
            break;
        }
        CuentaNum++;
        Lectura.getline(Linea, 1280);
    }
    Lectura.close();
}

y aquí su ayuda:

    /**
    Uso de la función split(VariableString, *"Caracter", NombreVector, TamañoVector)
    Descripción, esta función es muy parecida a la función split() que utiliza Python,
    En esta función split() se deben pasar por parámetros los valores:
    VariableString, *"PunteroDeCaracter", NombreDelVectorTipoString, VariableInt


    Ejemplo 1:

    string Palabra = "Hola feliz dia";
    vector<string> TempBuff(0);
    int TotalVector;
    split(Palabra, *" ",  TempBuff, TotalVector);

    cout << TotalVector << endl; // Devuelve tamaño del vector: 3
    cout << TempBuff[0] << endl; // Devuelve: Hola
    cout << TempBuff[1] << endl; // Devuelve: feliz
    cout << TempBuff[2] << endl; // Devuelve: dia


    Ejemplo 2:

    string Palabra2 = "Programador_de_C_mas_mas";
    int TotalVector2;
    vector<string> TempBuff2(0);
    split(Palabra2, *"_",  TempBuff2, TotalVector2);

    cout << TotalVector2 << endl; // Devuelve el tamaño del vector: 4
    cout << TempBuff2[0] << endl; // Devuelve: Programador
    cout << TempBuff2[1] << endl; // Devuelve: de
    cout << TempBuff2[2] << endl; // Devuelve: C
    cout << TempBuff2[3] << endl; // Devuelve: mas
    cout << TempBuff2[4] << endl; // Devuelve: mas

    NOTA IMPORTANTE: Se puede usar el mismo nombre del vector "TempBuff", también
    la variable string "Palabra" y la variable tipo entero "TotalVector", por lo que
    no es necesario volver a crear ni las variables, ni el vector. No obstante se puede
    crear otro vector y otras variables con otros nombres y pasarlos como parámetros
    en la función split().

    Otro punto a tener muy en cuenta, es que, antes de poder comparar un cierto valor del
    vector de una cierta posición con una variable string, es importante hacer una
    comparación que el vector sea mayor o igual a la posición que se va a comparar, esto
    evitará un fallo de segmentación / violación de memoria.

    Ejemplo:

    if (TotalVector >= 4) {
        cout << "Si, el vector tiene 4 o más valores dentro de él" << endl;
        cout << "Ahora se pueden ejecutar las instrucciones" << endl;


    ---------------------------------------------------------------------------------------
    Uso de la función Contar(VariableString, *"Caracter", VariableInt)


    Ejemplo 1:

    int NumChars = 0;
    string Saludo = "H-o-l-a a-m-i-g-o-s";
    Contar(Saludo, *"-", NumChars);
    cout << NumChars << endl; // devuelve: 8


    Ejemplo 2:

    string Saludo = "H o l a a m i g o s";
    Contar(Saludo, *"-", NumChars);
    cout << NumChars << endl; // devuelve: 9


    Ejemplo 3:

    string Saludo = "Hola";
    Contar(Saludo, *"_", NumChars);
    cout << NumChars << endl; // devuelve: 0


    ---------------------------------------------------------------------------------------
    Uso de la función Multi(VariableString, Int)


    Ejemplo 1:

    int main() {
    string MiTexto = "hola ";
    Multi(MiTexto, 10);
    cout << MiTexto << endl; // devuelve: hola hola hola hola hola hola hola hola hola hola



    --------------------------------------------------------------------------------------
    Uso de la función LeeLinea(ConstanteChar, VariableString, Int)


    Ejemplo 1:

    int main() {
        const char *NombreArchivo = "Prueba.txt";
        string DatoLinea1;
        LeeLinea(NombreArchivo, DatoLinea1, 1);
        cout << DatoLinea1 << endl; // devuelve: El valor de la línea 1
    }


    Ejemplo 2:

    int main() {
        const char *NombreArchivo = "Prueba.txt";
        string DatoLinea1;
        LeeLinea(NombreArchivo, DatoLinea1, 7);
        cout << DatoLinea1 << endl; // devuelve: El valor de la línea 7
    }


    Ejemplo 3:

    int main() {
        const char *NombreArchivo = "Prueba.txt";
        string DatoLinea1;
        LeeLinea(NombreArchivo, DatoLinea1, 43);
        cout << DatoLinea1 << endl; // devuelve: El valor de la línea 43
    }

    */


Espero que a alguien le sirva!!

PD: Todas las funciones funcionan perfectamente, lo que no he terminado es seguir haciendo más de éstas funciones, pero las que ya están aportadas, si funcionan sin problemas.

Saludos!
« Última modificación: 11 de Mayo 2015, 18:49 por Alex Rodríguez »

richard.izarra

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Excelente . . Muchas Gracias por el aporte.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".