Archivo de texto a un vector

Iniciado por Charcan, 16 Julio 2016, 23:06 PM

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

Charcan

estoy intentando correr mi codigo solo para ir probando lo que tengo, la cosa esta en que se cierra al ejecutar, intente mostrar por pantalla lo que se captura en el vector pero no concuerda con el archivo de prueba..

Me podrian ayudar ? muichas gracias !


Source....................................................................................

#include "leer.h"
#include <iostream>


using namespace std;

void main()
{
Leer L;
char contenido[1000];
*contenido=L.cargar();

cout<<L.numeros(contenido);




system("pause");

}



Leer.cpp.......................................................................
#include "leer.h"
#include <iostream>
#include <fstream>


using namespace std;

  char Leer :: cargar()//cargando el archivo
{

cout << "Arrastre a la pantalla el archivo a analizar" << endl;
cin >> archivo;
system("cls");
ifstream fin(archivo);

if (!fin.fail())
{
int i =0;
while(!fin.eof())
{

fin>>contenido[i];
i++;
}
}
else
{
cout<<"Error al abrir archivo"<<endl;
system ("pause");


}
return *contenido;
  }

  int Leer :: numeros(char contenido[1000])//determinamos si son numeros
  {
for (int i=0;i<1000;i++)
{
if (isdigit(contenido[i]))
{
cnum++;
}
}
return(cnum);
  }

  int Leer :: palabras(char contenido[1000])//determinando si son palabras
  {
for (int i=0;i<sizeof(contenido);i++)
{
if (isspace(contenido[i]))
{
cpalabra++;
}
}
return(cpalabra);
  }

  int Leer :: letras(char contenido[1000])//determinamos si es letra
  {
for (int i=0;i<sizeof(contenido);i++)
{
if (islower(contenido[i])||isupper(contenido[i]))
{
calpha++;
}
}
return(calpha);
  }

  int Leer :: cespecial(char contenido [1000])//caracteres especiales, puntos comas etc
  {
for (int i=0;i<sizeof(contenido);i++)
{
if (!isalpha(contenido[i]))
{
cother++;


if (contenido[i] == ',')
{
ccoma++;

}

if (contenido[i] == '.')
{
cpunto++;
}

if (contenido[i] == ':')
{
cdospuntos++;
}

if (contenido[i] == ';')
{
cpuntoycoma++;
}


}

}
  return(cother,ccoma,cpunto,cdospuntos,cpuntoycoma);
  }
 
  void Leer :: mostrar()//mostramos en pantalla todos los datos requeridos (esta asi de manera temporal)
  {
 
  cout << "numero de comas es :" << ccoma << endl;
  cout << "numero de punto es :" << cpunto << endl;
  cout << "numero de los dos puntos  :" << cdospuntos << endl;
  cout << "numero de punto y coma es :" << cpuntoycoma << endl;
  cout << "numero de caracteres con espacios en blacos es :" << cpalabra+cnum + cother + calpha-1 << endl;
  cout << "la ubicacion del archivo es :" << archivo << endl;

system("pause");
  }

Leer.h.......................................................................................
#ifndef _LEER_H __LEER_H
#define _LEER_H
#include <iostream>
#include <fstream>
#include <cctype>


using namespace std;


// Declaración de la clase
 typedef class Leer
{
 //Atributos
             private:
             
 int cpalabra;
 int cnum;
 int cother;
 int cchar;
 int ccoma;
 int cpunto;
 int cpuntoycoma;
 int cdospuntos;
 int calpha;
 char next;
 char archivo[1000];
 

 //Métodos
             public:
 
              char cargar();
  int numeros(char contenido[]);
  int palabras(char contenido[]);
  int cespecial(char contenido[]);
  int letras(char contenido[]);
  void mostrar();
  char contenido[1000];
}Tleer;
#endif /*__LEER_H */

engel lex

usa el debugger de tu compilador a ver donde está fallando, si no sabes aun como usarlo seguro google y youtube te resuelven, es bastante fácil
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

class_OpenGL

Sinceramente, se me escapan demasiados aspectos de la lógica de este programa, pero intentaré mostrar lo que me parece que te pasa:

  • Estás suponiendo que has llenado el arreglo Leer.contenido entero con el archivo. Entonces, cuando no se llena al completo, la memoria que no se llena tiene valores 'basura'. A lo que quiero llegar es que si no se leen 1000 caracteres del archivo, el arreglo no se llena al completo y por lo tanto a la hora de contar números es posible que te muestre más de los que hay. Para solucionar esto, tendrías que guardar cuántos elementos se han almacenado en el arreglo y después, en el for del método números, compruebas hasta ese límite.

  • En los demás métodos ni siquiera haces lo que en el método 'numeros'. Tendrías que aplicar lo mismo que te he dicho en la aclaración anterior.

  • Esto no sé si será un error, pero por si acaso, lo comentaré (porque es probable que sea un error). Lo que retorna el método 'cargar' es el primer carácter de la cadena. Lo que te aconsejo hacer es que el método no acepte ningún argumento y que tomes los datos del arreglo de la clase, teniendo en cuenta la cantidad de caracteres leídos:

Código (cpp) [Seleccionar]
int Leer::numeros() { //determinamos si son numeros
for(int i=0; i < caracteres_leidos; i++) {
if(isdigit(this->contenido[i])) // El this-> no es obligatorio
cnum++;
}
return(cnum);
}
    [/li]

Es posible que haya más errores que yo no haya visto, pero al menos aclaro algunas dudas

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

Charcan

Gracias intentare seguir sus consejos! les av¡so si me funciona!