Hola,
Pues eso, en mi programa quiero separar el string que utilizo como entrada del usuario,por ejemplo el usuario escribe: "di hola", y despues separo el string en "di" y "hola", aunque mejor sería que fuera una función en la que puedes elegir el separador, como:
separa(entrada,".") o separa(entrada,"a")
Gracias y Saludos.
Prometheus.
Hola
Para eso puedes usar la función strtok (http://www.cplusplus.com/reference/clibrary/cstring/strtok/)
Saludos
No funciona:
Dice: strtok was not declared in this scope.
Observa:
http://c.conclase.net/librerias/?ansifun=strtok
Hola
Tienes que incluir string.h si estás en C o cstring si estás en C++
Saludos
Mejor os dejo el código:
#include <iostream>
#include <string>
using namespace std;
int main()
{
char inp[20];
char *pch;
cout<<"Prueba:\n";
bool running = true;
while(running)
{
cout<<">>>";
cin.getline(inp,5);
pch = strtok(inp,".");
}
return 0;
}
Salida del compilador:
C:\Users\Samuel\Documents\Programming\C++\Chocolate\main.cpp||In function 'int main()':|
C:\Users\Samuel\Documents\Programming\C++\Chocolate\main.cpp|16|error: 'strtok' was not declared in this scope|
||=== Build finished: 1 errors, 0 warnings ===|
Eso es porque strok pertenece a cstring.
#include <cstring>
Ya lo habia mencionado satu, no string, cstring o string.h aunque esta última pues no hace parte de la librería standard de C++
Saludos
Bueno las función strtok() no me gusta, osea, algo como esto:
vector<string> split()
{
// La función.
}
vector<string> inp;
int main()
{
string inp = "mov.ax.4";
split(inp,"."); //Guarda en inp[0] "mov" en inp[1] "ax" y en inp [2] "4"
}
No he podido usar strtok correctamente de todas formas.
Gracias Igualmente.
Saludos!
si lo quieres hacer con vectore, pues bueno aqui te dejo un ejemplo que acabo de hacer:
vector<string> split(string str, char token) {
vector<string> res;
string tmp;
for ( unsigned int i = 0; i <= str.length(); i++ ) {
if ( str[i] == token || i == str.length() ) {
if ( str[i + 1] == token ) continue;
res.push_back(tmp);
tmp.erase();
i++;
}
tmp += str[i];
}
return res;
}
Espero te pueda servir de guia.
He intentado simular lo mejor posible el comportamiento del método split() en Ruby.
Saludos
Hola! no pudist usar strtok porque no lo estas usando bien. Aparte de leer el link q te mando exel http://c.conclase.net/librerias/?ansifun=strtok falta agregar algo mas(q el link no lo dice pero si lo muestra en el ejemplo): cuando se llama por primera ves a strtok, en el primer argumento se pone la cadena q se va a separar en tokens. PERO cuando se llama x segunda vez(y posteriores) en el primer argumento hay q poner NULL
#include <iostream>
#include <string>
using namespace std;
int main()
{
char inp[20];
char *pch;
cout<<"Prueba:\n";
cin.getline(inp,5); // ingreso de cadena
pch=strtok(inp,"."); /* Primera llamada -> primer token -> primer argumento la cadena a separar*/
printf("%s\n",pch); // imprime el primer token
while((pch = strtok(NULL,"."))!=NULL) /* Segunda llamada y posteriores, en el primer argumento va NULL */
{
printf("%s\n",pch); // imprime los tokens posteriores
}
return 0;
}
Puse los printf xq no tengo idea de como funciona el cout :P (no se C++)
Saludos
durasno como se mencionó antes strok() no hace parte de <string> (http://www.cplusplus.com/reference/string/string/) y al compilar dará error:
Citarerror: 'strtok' no se declaró en este ámbito
Se debe incluir <cstring> (http://www.cplusplus.com/cstring) o <string.h> (http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.14.html) y esta última no pertenece a la librería estándar de C++
Saludos
Lo q pasa es q yo copie el codigo que habia subido prometheus48 y no me di cuenta de eso :S, solo modifiq la part q estaba mal (o lo q me quisiste decir es q strtok no esta en C++?? )
Saludos
Claro que si lo está! XD bueno pues si lo copias es entendible que se te haya pasado =D, en C++ se puede encontrar bajo <cstring>
Saludos
Citar
si lo quieres hacer con vectore, pues bueno aqui te dejo un ejemplo que acabo de hacer:
Código
vector<string> split(string str, char token) {
vector<string> res;
string tmp;
for ( unsigned int i = 0; i <= str.length(); i++ ) {
if ( str == token || i == str.length() ) {
if ( str[i + 1] == token ) continue;
res.push_back(tmp);
tmp.erase();
i++;
}
tmp += str;
}
return res;
}
Espero te pueda servir de guia.
He intentado simular lo mejor posible el comportamiento del método split() en Ruby.
Saludos
« Última modificación: Hoy a las 07:19 por RyogiShiki » Reportar al moderador En línea
Exactamente lo que buscaba Muchísimas gracias RyogiShiki!
:D:D:D
Pero ahora tengo ortro problema(como no...), usar cin>>variable; Obligatoriamente cin>>variable; que cuando el usuario no introduce un valor, sino que directamente presiona enter, siga la ejecución como si el usuario hubiera introducido un valor.
Gracias adelantadas,
Salu2!!!
Olvidadlo ya lo he solucionado.
Gracias a todos.
Salu2!
Bien, me alegro que haya sido de ayuda.
Saludos