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
#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;
}
se me ocurrio dejarlo como
string dato[200];
y luego use el cambio de
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?
Hola
El problema está aquí:
ptrToken = strtok(linea, "," );
datoguardado[i] = ptrToken;
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:
char datoguardado[100][30]; // asi podras guardar hasta 100 peliculas con el nombre de hasta 30 caracteres cada una
Si lo haces así acuérdate de que los char* no se asignan con =, sino con strcpy/strncpy:
strcpy(datoguardado[i], ptrToken);
Saludos
La ultima pregunta (me funciono todo perfecto), si quiero N películas como tu ejemplo, como hago para darle el numero de películas?
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?
Cita de: 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?
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?
Hola
Sí, así es como debes hacerlo. Aunque recuerda que después debes liberar la memoria con free.
Saludos
ok muchas gracias =D