Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: prometheus48 en 17 Mayo 2012, 18:03 pm



Título: Separar string Ayuda
Publicado por: prometheus48 en 17 Mayo 2012, 18:03 pm
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.


Título: Re: Separar string Ayuda
Publicado por: satu en 17 Mayo 2012, 19:36 pm
Hola

Para eso puedes usar la función strtok (http://www.cplusplus.com/reference/clibrary/cstring/strtok/)

Saludos


Título: Re: Separar string Ayuda
Publicado por: prometheus48 en 17 Mayo 2012, 19:51 pm
No funciona:

Dice: strtok was not declared in this scope.


Título: Re: Separar string Ayuda
Publicado por: exel en 17 Mayo 2012, 20:13 pm
Observa:
http://c.conclase.net/librerias/?ansifun=strtok


Título: Re: Separar string Ayuda
Publicado por: satu en 17 Mayo 2012, 20:15 pm
Hola

Tienes que incluir string.h si estás en C o cstring si estás en C++

Saludos


Título: Re: Separar string Ayuda
Publicado por: prometheus48 en 17 Mayo 2012, 20:39 pm
Mejor os dejo el código:
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ódigo:
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 ===|


Título: Re: Separar string Ayuda
Publicado por: RyogiShiki en 17 Mayo 2012, 21:10 pm
Eso es porque strok pertenece a cstring.

Código
  1. #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


Título: Re: Separar string Ayuda
Publicado por: prometheus48 en 17 Mayo 2012, 22:15 pm
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!


Título: Re: Separar string Ayuda
Publicado por: RyogiShiki en 18 Mayo 2012, 01:08 am
si lo quieres hacer con vectore, pues bueno aqui te dejo un ejemplo que acabo de hacer:

Código
  1. vector<string> split(string str, char token) {
  2.    vector<string> res;
  3.    string tmp;
  4.    for ( unsigned int i = 0; i <= str.length(); i++ ) {
  5.        if ( str[i]  == token || i == str.length() ) {
  6.            if ( str[i + 1] == token ) continue;
  7.            res.push_back(tmp);
  8.            tmp.erase();
  9.            i++;
  10.        }
  11.        tmp += str[i];
  12.    }
  13.    return res;
  14. }

Espero te pueda servir de guia.

He intentado simular lo mejor posible el comportamiento del método split() en Ruby.

Saludos


Título: Re: Separar string Ayuda
Publicado por: durasno en 18 Mayo 2012, 04:08 am
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

Código
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.    char inp[20];
  9.    char *pch;
  10.    cout<<"Prueba:\n";
  11.    cin.getline(inp,5); // ingreso de cadena
  12.    pch=strtok(inp,"."); /* Primera llamada -> primer token -> primer argumento la cadena a separar*/
  13.    printf("%s\n",pch); // imprime el primer token
  14.    while((pch = strtok(NULL,"."))!=NULL) /* Segunda llamada y posteriores, en el primer argumento va NULL */
  15.    {
  16.        printf("%s\n",pch); // imprime los tokens posteriores
  17.    }
  18.    return 0;
  19. }

Puse los printf xq no tengo idea de como funciona el cout :P (no se C++)

Saludos


Título: Re: Separar string Ayuda
Publicado por: RyogiShiki en 18 Mayo 2012, 04:35 am
durasno como se mencionó antes strok() no hace parte de <string> (http://www.cplusplus.com/reference/string/string/) y al compilar dará error:

Citar
error: ‘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


Título: Re: Separar string Ayuda
Publicado por: durasno en 18 Mayo 2012, 05:04 am
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


Título: Re: Separar string Ayuda
Publicado por: RyogiShiki en 18 Mayo 2012, 05:30 am
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


Título: Re: Separar string Ayuda
Publicado por: prometheus48 en 18 Mayo 2012, 18:12 pm
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!!!


Título: Re: Separar string Ayuda
Publicado por: prometheus48 en 18 Mayo 2012, 18:37 pm
Olvidadlo ya lo he solucionado.

Gracias a todos.

Salu2!


Título: Re: Separar string Ayuda
Publicado por: RyogiShiki en 18 Mayo 2012, 18:52 pm
Bien, me alegro que haya sido de ayuda.

Saludos