una separar recortar por parte palabra letras extraer ejemplos caracter cadena c c-strings

recortar - separar string por caracter java



C-dividir cadena en una matriz de cadenas (2)

No estoy completamente seguro de cómo hacer esto en C:

char* curToken = strtok(string, ";"); //curToken = "ls -l" we will say //I need a array of strings containing "ls", "-l", and NULL for execvp()

¿Cómo voy a hacer esto?


Como ya ha analizado strtok simplemente continúe por la misma ruta y divida la cadena utilizando el espacio ( '' '' ) como delimitador, luego use algo como realloc para aumentar el tamaño de la matriz que contiene los elementos que se pasarán a execvp .

Consulte el ejemplo siguiente, pero tenga en cuenta que strtok modificará la cadena que se le pasa. Si no desea que esto suceda, debe hacer una copia de la cadena original, utilizando strcpy o una función similar.

char str[]= "ls -l"; char ** res = NULL; char * p = strtok (str, " "); int n_spaces = 0, i; /* split string and append tokens to ''res'' */ while (p) { res = realloc (res, sizeof (char*) * ++n_spaces); if (res == NULL) exit (-1); /* memory allocation failed */ res[n_spaces-1] = p; p = strtok (NULL, " "); } /* realloc one extra element for the last NULL */ res = realloc (res, sizeof (char*) * (n_spaces+1)); res[n_spaces] = 0; /* print the result */ for (i = 0; i < (n_spaces+1); ++i) printf ("res[%d] = %s/n", i, res[i]); /* free the memory allocated */ free (res);

res[0] = ls res[1] = -l res[2] = (null)


Aquí hay un ejemplo de cómo usar strtok prestado de MSDN.

Y los bits relevantes, necesita llamarlo varias veces. El token char * es la parte que incluirías en una matriz (puedes calcular esa parte).

char string[] = "A string/tof ,,tokens/nand some more tokens"; char seps[] = " ,/t/n"; char *token; int main( void ) { printf( "Tokens:/n" ); /* Establish string and get the first token: */ token = strtok( string, seps ); while( token != NULL ) { /* While there are tokens in "string" */ printf( " %s/n", token ); /* Get next token: */ token = strtok( NULL, seps ); } }