Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ZedGe en 24 Diciembre 2011, 20:12 pm



Título: Problema con STRTok, Char y String [C++]
Publicado por: ZedGe en 24 Diciembre 2011, 20:12 pm
Este codigo lee un archivo txt el cual puede tener algo asi

perro,gato,arbol,casa
gato,pato,girafa,pelota
....
....

el problema que uso el STRtok para guardar esas variables en un char[xxx], es decir, guardo las variables sin las comas..
asd[0] = perro;
asd[1] = gato;
...
..

el problema que al usar char y puntero me sale error: invalid conversion  from 'char*' to 'char'
La idea es tratar de uno usar string, ya que al poner mi datoguardado como string en vez de char funciona correcto de la forma que lo tengo no


Código:
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstring>

using namespace std;

int main()
{

char linea[128];
char *ptrToken;
int i=0;
char datoguardado[200];

ifstream entrada("texto.txt");
ifstream input;
input.open("texto.txt");

if (entrada.fail() )
{
        cout << "Error al tratar de abrir archivo \n";
        cin.get();
      return 1;
}

while(!entrada.eof()){

entrada.getline(linea, sizeof(linea));
ptrToken = strtok(linea, "," );

while ( ptrToken != NULL ) {
      datoguardado[i] = ptrToken;
      i++;
      ptrToken = strtok(NULL, "," );
  }
}
entrada.close();
input.close();
return 0;
}




Título: Re: Problema con STRTok, Char y String [C++]
Publicado por: ZedGe en 24 Diciembre 2011, 21:39 pm
se me ocurrio dejarlo como


Código:
string dato[200];

y luego use el cambio de

Código:
const char *dato1 = dato[j++].c_str();


ya que mis datos deben ser const char* por que la función que los usa usa ese tipo de dato


alguna idea para no usar c_str y hacerlo altiro mientras se lee el archivo?


Título: Re: Problema con STRTok, Char y String [C++]
Publicado por: satu en 26 Diciembre 2011, 22:46 pm
Hola

El problema está aquí:
Código
  1. ptrToken = strtok(linea, "," );
  2. datoguardado[i] = ptrToken;
  3.  
ya que ptrToken es de tipo char* y datoguardado[ i ] es un char. La solución más rápida sería declarar datoguardado como un array bidimensional:
Código
  1. char datoguardado[100][30]; // asi podras guardar hasta 100 peliculas con el nombre de hasta 30 caracteres cada una
  2.  

Si lo haces así acuérdate de que los char* no se asignan con =, sino con strcpy/strncpy:
Código
  1. strcpy(datoguardado[i], ptrToken);
  2.  

Saludos


Título: Re: Problema con STRTok, Char y String [C++]
Publicado por: ZedGe en 27 Diciembre 2011, 03:20 am
La ultima pregunta (me funciono todo perfecto), si quiero N películas como tu ejemplo, como hago para darle el numero de películas?

Código:
char nombre[][];
nombre=(char**)malloc(n*sizeof(char*)); //n=numero de cadenas
//luego, para cada cadena:
nombre[i]=(char*)malloc(n*sizeof(char)); // n= numero de caracteres en la cadena
 


asi deberia ser?


Título: Re: Problema con STRTok, Char y String [C++]
Publicado por: ZedGe en 27 Diciembre 2011, 03:24 am
La ultima pregunta (me funciono todo perfecto), si quiero N películas como tu ejemplo, como hago para darle el numero de películas?

Código:
char nombre[][];
nombre=(char)malloc(n*sizeof(char)); //n=numero de cadenas
//luego, para cada cadena:
nombre[i]=(char)malloc(n*sizeof(char)); // n= numero de caracteres en la cadena
 


asi deberia ser?


Título: Re: Problema con STRTok, Char y String [C++]
Publicado por: satu en 27 Diciembre 2011, 10:02 am
Hola

Sí, así es como debes hacerlo. Aunque recuerda que después debes liberar la memoria con free.

Saludos


Título: Re: Problema con STRTok, Char y String [C++]
Publicado por: ZedGe en 27 Diciembre 2011, 20:08 pm
ok muchas gracias =D