elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C]Como puedo parsear un simple comando
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C]Como puedo parsear un simple comando  (Leído 3,067 veces)
huchoko

Desconectado Desconectado

Mensajes: 97


Ver Perfil WWW
[C]Como puedo parsear un simple comando
« en: 13 Febrero 2019, 18:03 pm »

Estoy escribiendo una consola en C, pues debo recibir comandos (por el teclado) y parsearlos.
E.j: tengo este comando:
Código:
echo hola! -f
Pues nececitaria separar esas strings algo asi:
Código:
["echo", "hola!", "-f"]
Osea separarlas en diferentes strings y guardarlas en un array.
Como lo podria hacer?
Saludos


« Última modificación: 13 Febrero 2019, 20:49 pm por hextakatt » En línea

ThunderCls


Desconectado Desconectado

Mensajes: 455


Coder | Reverser | Gamer


Ver Perfil WWW
Re: [C]Como puedo parsear un simple comando
« Respuesta #1 en: 13 Febrero 2019, 18:26 pm »

Tu funcion se llama strtok
https://en.cppreference.com/w/c/string/byte/strtok


En línea

-[ "…I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/
huchoko

Desconectado Desconectado

Mensajes: 97


Ver Perfil WWW
Re: [C]Como puedo parsear un simple comando
« Respuesta #2 en: 13 Febrero 2019, 19:00 pm »

Gracias! :)
En línea

huchoko

Desconectado Desconectado

Mensajes: 97


Ver Perfil WWW
Re: [C]Como puedo parsear un simple comando
« Respuesta #3 en: 13 Febrero 2019, 19:20 pm »

Código
  1. char* cmdparser(char* fstrlv1, char* s, int len)
  2. {
  3.    char* fstrlv[len];
  4.    char *tok = s;
  5.    int i = 0;
  6.  
  7.    while ((tok = strtok(tok, " ")) != NULL)
  8.    {
  9.        fstrlv[++i] = tok;
  10.        tok = NULL;
  11.    }
  12.    fstrlv[i] = '\0';
  13.    return fstrlv;
  14. }
  15.  
He tratado de escribir esta función que debería retornarme el array con los strings separados, pero no funciona...
Algo me dice que mi código es horrible...
En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: [C]Como puedo parsear un simple comando
« Respuesta #4 en: 13 Febrero 2019, 19:25 pm »

El ++i no deberia ser i++?
En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
huchoko

Desconectado Desconectado

Mensajes: 97


Ver Perfil WWW
Re: [C]Como puedo parsear un simple comando
« Respuesta #5 en: 13 Febrero 2019, 19:42 pm »

Tampoco funciona :/
En línea

ThunderCls


Desconectado Desconectado

Mensajes: 455


Coder | Reverser | Gamer


Ver Perfil WWW
Re: [C]Como puedo parsear un simple comando
« Respuesta #6 en: 13 Febrero 2019, 20:02 pm »

EDIT: Disculpa no habia chequeado tu code  :silbar: en fin

Código
  1. #include <iostream>
  2. #include <cstring>
  3. #include <vector>
  4.  
  5. std::vector<char*> cmdparser(char* str, const char *delim)
  6. {
  7.    std::vector<char*> str_array;
  8.    char *token = strtok(str, delim);
  9.    while (token)
  10.    {
  11.        str_array.push_back(token);
  12.        token = strtok(NULL, delim);
  13.    }
  14.  
  15.    return str_array;
  16. }
  17.  
  18. int main()
  19. {
  20.    char str[] = "-param_1 -param_2 -param_3 -param_n";
  21.    char delim[] = " ";
  22.    for(auto s : cmdparser(str, delim))
  23.        cout << s << endl;
  24.  
  25.    return 0;
  26. }

Salida
-param_1
-param_2
-param_3
-param_n


Saludos
« Última modificación: 13 Febrero 2019, 20:25 pm por ThunderCls » En línea

-[ "…I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/
huchoko

Desconectado Desconectado

Mensajes: 97


Ver Perfil WWW
Re: [C]Como puedo parsear un simple comando
« Respuesta #7 en: 13 Febrero 2019, 21:02 pm »

EDIT: Disculpa no habia chequeado tu code  :silbar: en fin

Código
  1. #include <iostream>
  2. #include <cstring>
  3. #include <vector>
  4.  
  5. std::vector<char*> cmdparser(char* str, const char *delim)
  6. {
  7.    std::vector<char*> str_array;
  8.    char *token = strtok(str, delim);
  9.    while (token)
  10.    {
  11.        str_array.push_back(token);
  12.        token = strtok(NULL, delim);
  13.    }
  14.  
  15.    return str_array;
  16. }
  17.  
  18. int main()
  19. {
  20.    char str[] = "-param_1 -param_2 -param_3 -param_n";
  21.    char delim[] = " ";
  22.    for(auto s : cmdparser(str, delim))
  23.        cout << s << endl;
  24.  
  25.    return 0;
  26. }

Salida
-param_1
-param_2
-param_3
-param_n


Saludos
Gracias, pero lo nececito en C. No es por ser mal agradecido :)
Tratare de portearlo a C.
En línea

huchoko

Desconectado Desconectado

Mensajes: 97


Ver Perfil WWW
Re: [C]Como puedo parsear un simple comando
« Respuesta #8 en: 13 Febrero 2019, 21:18 pm »

Código
  1. char* cmdparser(char* str, const char *delim)
  2. {
  3.    char* str_array;
  4.    char *token = strtok(str, delim);
  5.    int i = 0;
  6.    while (token)
  7.    {
  8.        str_array[i++] = token;
  9.        token = strtok(NULL, delim);
  10.    }
  11.  
  12.    return str_array;
  13. }
Logre portear el codigo, pero no funciona, otra vez  :huh:
En línea

ThunderCls


Desconectado Desconectado

Mensajes: 455


Coder | Reverser | Gamer


Ver Perfil WWW
Re: [C]Como puedo parsear un simple comando
« Respuesta #9 en: 13 Febrero 2019, 22:48 pm »

Gracias, pero lo nececito en C. No es por ser mal agradecido :)
Tratare de portearlo a C.

Igual no tengo nada mejor que hacer ahora mismo  :silbar:

Código
  1. char** cmdparser(char* str, const char* delim, int args)
  2. {
  3.    char** str_array = (char**)malloc(sizeof(char*) * args);
  4.    char* token = strtok(str, delim);
  5.    int index = 0;
  6.    while (token && index < args)
  7.    {
  8.        str_array[index] = (char*)malloc(sizeof(char) * strlen(token));
  9.        strcpy(str_array[index], token);
  10.        token = strtok(NULL, delim);
  11.        index++;
  12.    }
  13.  
  14.    return str_array;
  15. }
  16.  
  17. int main()
  18. {
  19.    char str[] = "-param_1 -param_2 -param_3 -param_n";
  20.    char delim[] = " ";
  21.    int args = 4;
  22.    char** str_array = cmdparser(str, delim, args);
  23.  
  24.    for(int i = 0; i < args; i++)
  25.        cout << str_array[i] << endl;
  26.  
  27.    // es tu responsabilidad
  28.    // liberar la memoria que pediste anteriormente
  29.    for(int i = 0; i < args; i++)
  30.        free(str_array[i]);
  31.    free(str_array);
  32.  
  33.    return 0;
  34. }
En línea

-[ "…I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[RESUELTO] [Duda] Como puedo retrazar la ejecucion de un Comando???
Programación Visual Basic
agus0 6 6,123 Último mensaje 14 Octubre 2009, 04:51 am
por BlackZeroX
Parsear HTML con PHP – Simple HTML DOM Parser
PHP
madpitbull_99 3 15,476 Último mensaje 1 Abril 2014, 09:54 am
por BlackM4ster
Parsear con PHP Simple HTML DOM
PHP
multi-media asdfg 5 6,411 Último mensaje 16 Julio 2011, 01:20 am
por multi-media asdfg
[solucionado] Como puedo hacer este comando simple?
GNU/Linux
venadHD 8 4,074 Último mensaje 15 Agosto 2015, 20:32 pm
por venadHD
Como puedo ejecutar mas de un comando dentro de un FOR?
Scripting
mis4 0 1,783 Último mensaje 18 Noviembre 2016, 18:33 pm
por mis4
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines