Autor
|
Tema: [C]Como puedo parsear un simple comando (Leído 3,055 veces)
|
huchoko
|
Estoy escribiendo una consola en C, pues debo recibir comandos (por el teclado) y parsearlos. E.j: tengo este comando: Pues nececitaria separar esas strings algo asi: 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
|
|
|
|
|
|
huchoko
|
char* cmdparser(char* fstrlv1, char* s, int len) { char* fstrlv[len]; char *tok = s; int i = 0; while ((tok = strtok(tok , " ")) != NULL ) { fstrlv[++i] = tok; tok = NULL; } fstrlv[i] = '\0'; return fstrlv; }
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
|
|
|
|
|
huchoko
|
Tampoco funciona :/
|
|
|
En línea
|
|
|
|
ThunderCls
Desconectado
Mensajes: 455
Coder | Reverser | Gamer
|
EDIT: Disculpa no habia chequeado tu code en fin #include <iostream> #include <cstring> #include <vector> std::vector<char*> cmdparser(char* str, const char *delim) { std::vector<char*> str_array; char *token = strtok(str, delim); while (token) { str_array.push_back(token); token = strtok(NULL, delim); } return str_array; } int main() { char str[] = "-param_1 -param_2 -param_3 -param_n"; char delim[] = " "; for(auto s : cmdparser(str, delim)) cout << s << endl; return 0; }
Salida-param_1 -param_2 -param_3 -param_nSaludos
|
|
« Última modificación: 13 Febrero 2019, 20:25 pm por ThunderCls »
|
En línea
|
|
|
|
huchoko
|
EDIT: Disculpa no habia chequeado tu code en fin #include <iostream> #include <cstring> #include <vector> std::vector<char*> cmdparser(char* str, const char *delim) { std::vector<char*> str_array; char *token = strtok(str, delim); while (token) { str_array.push_back(token); token = strtok(NULL, delim); } return str_array; } int main() { char str[] = "-param_1 -param_2 -param_3 -param_n"; char delim[] = " "; for(auto s : cmdparser(str, delim)) cout << s << endl; return 0; }
Salida-param_1 -param_2 -param_3 -param_nSaludos Gracias, pero lo nececito en C. No es por ser mal agradecido Tratare de portearlo a C.
|
|
|
En línea
|
|
|
|
huchoko
|
char* cmdparser(char* str, const char *delim) { char* str_array; char *token = strtok(str , delim ); int i = 0; while (token) { str_array[i++] = token; } return str_array; }
Logre portear el codigo, pero no funciona, otra vez
|
|
|
En línea
|
|
|
|
ThunderCls
Desconectado
Mensajes: 455
Coder | Reverser | Gamer
|
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 char** cmdparser(char* str, const char* delim, int args) { char** str_array = (char**)malloc(sizeof(char*) * args ); char* token = strtok(str , delim ); int index = 0; while (token && index < args) { str_array [index ] = (char*)malloc(sizeof(char) * strlen(token )); strcpy(str_array [index ], token ); index++; } return str_array; } int main() { char str[] = "-param_1 -param_2 -param_3 -param_n"; char delim[] = " "; int args = 4; char** str_array = cmdparser(str, delim, args); for(int i = 0; i < args; i++) cout << str_array[i] << endl; // es tu responsabilidad // liberar la memoria que pediste anteriormente for(int i = 0; i < args; i++) return 0; }
|
|
|
En línea
|
|
|
|
|
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,098
|
14 Octubre 2009, 04:51 am
por BlackZeroX
|
|
|
Parsear HTML con PHP – Simple HTML DOM Parser
PHP
|
madpitbull_99
|
3
|
15,455
|
1 Abril 2014, 09:54 am
por BlackM4ster
|
|
|
Parsear con PHP Simple HTML DOM
PHP
|
multi-media asdfg
|
5
|
6,392
|
16 Julio 2011, 01:20 am
por multi-media asdfg
|
|
|
[solucionado] Como puedo hacer este comando simple?
GNU/Linux
|
venadHD
|
8
|
4,058
|
15 Agosto 2015, 20:32 pm
por venadHD
|
|
|
Como puedo ejecutar mas de un comando dentro de un FOR?
Scripting
|
mis4
|
0
|
1,776
|
18 Noviembre 2016, 18:33 pm
por mis4
|
|