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.
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 "\""
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];
primero el código se pone entre etiquetas GeSHi
segundo en la condición del while no pones la función strtok
#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
Vale, ya esta solucionado. Muchisimas gracias en serio :D