Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/05/2010, 09:03
Acanore
 
Fecha de Ingreso: abril-2009
Ubicación: Incomoda
Mensajes: 30
Antigüedad: 15 años
Puntos: 0
strings y strtok funcionan

Buenas xD

Despues de muchas horas de intentos y busquedas por internet (más un poquito de terquedad) he logrado utilizar el strtok con variables tipo strings.

No se si a alguien más aquí le ha pasado que al utilizar el strtok le sale mensajes de error tipo "Imposible convertir char* to const char*"... buscando en varias páginas lo común que encontraba era alternativas a strtok(funciones creadas por otros usuarios), e incluso una página decía que el strtok no trabajaba con strings.

Bueno, esto es un código de ejemplo:

Código C++:
Ver original
  1. //Code::Blocks 8.02
  2. #include <cstring>
  3. #include <iostream>//char *tmp = (char*)param0.c_str();
  4.  
  5. using namespace std;
  6.  
  7. //Dividir en Tokens
  8. int main()
  9. {
  10.   string oracion= "Me van a despedazar T_T";
  11.   char *frase = (char*)oracion.c_str(); //AQUI ERA DONDE ME QUEBRABA EL COCO
  12.   char *ptr;
  13.   cout << "Frase: " << frase << endl;
  14.   ptr = strtok(frase," ");//argumentos: frase, caracter delimitador
  15.   int c = 0;
  16.   string tokens[1000];
  17.   while(ptr != NULL)
  18.     {
  19.       tokens[c] = ptr;
  20.       ptr = strtok(NULL, " ");
  21.       c++;
  22.     }
  23.   int numero;
  24.   for(int i = 0; i < 10; i++){
  25.       cout << "\nQue parte de la frase desea conocer?: ";
  26.       cin>>numero;
  27.       numero = (numero <= c && numero-1 >= 0)?numero:1;
  28.       cout << "\nLa palabra en esta posicion es \""<<tokens[numero-1]<<"\""<<endl;
  29.   }
  30.   cout << "Cantidad de palabras: "<<c;
  31.   return 0;
  32. }

Al principio por ingenuidad lo que se me ocurrio fue:
char frase = oracion;


Soy nuevo en C++ y me causa dificultad acostumbrame a algunas cosas (lo mio es PHP) y estoy completamente seguro que éste código se puede mejorar. Me encantaria ver sugerencias xD ya que en ocasiones me obsesiono por hacer códigos muy compactos o resumidos. =D