Problema al delimitar con la función strtok

Iniciado por methisblue, 5 Abril 2018, 23:52 PM

0 Miembros y 2 Visitantes están viendo este tema.

methisblue

Hola , tengo una duda al delimitar con la función strtok y es que ¿cómo puedo delimitar una frase por las comillas (")?. Es decir, a mi me dan una frase como esta: " Pepe" come frutas , donde me piden que parta esa frase y guarde Pepe en un string sin las comillas, por lo que lo que he hecho ha sido partir "Pepe" en tres con esa función y coger el cacho de en medio que lleva la palabra que busco pero claro , el compilador se me queja cuando pongo esto:  ptr=strtok(const_cast<char*>(name.c_str()) , " " " );  Entonces, alguno sabe alguna forma de poder coger ese nombre ya bien sea del modo que yo he dicho o con otro diferente? Un saludo y gracias de antemano. 

Kenji-chan

pon tu codigo.
pero creo que uno de los errores es que estas poniendo mal el limitador en c/c++ no puedes hacer esto """ para introducir una comillas dentro de comillas haces esto "\""

methisblue

Sii, era eso lo que me pasaba, pero lo he arreglado y ahora si que funciona peor donde deberia guardarse el nombre se guarda un espacio en blanco, adjunto código:
(El código está hecho basándome en quitar las comillas a un nombre pej : "PEPE")


            ptr=strtok(const_cast<char*>(name.c_str()) , " \" " );
            cont=0;
            string nombre[2];
            while((ptr=strtok(NULL , " \" " )) !=NULL){ //Quitar comillas del nombre
                nombre[cont]=ptr;
                cont++;
            }
            name= nombre[1];

Kenji-chan

primero el código se pone entre etiquetas  GeSHi
segundo en la condición del while no pones la función  strtok

Código (cpp) [Seleccionar]

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;

int main(int argc, char *argv[]) {
string txt = "\"pepe\" como frutas";
const char delim[2] = "\"";
char* token;

token = strtok((char*)txt.c_str(), delim);

while(token != NULL){
fprintf(stdout, "%s\n", token);
token = strtok(NULL, delim);
}

return 0;
}


este código me da como salida
pepe
como frutas

ya que la funcion strtok devuelve un puntero al primer token encontrado en la cadena y devuelve un puntero nulo si no quedan tokens para recuperar

methisblue

Vale, ya esta solucionado. Muchisimas gracias en serio  :D