Cómo dividir una cadena en tokens por '&'
en C?¿Cómo dividir una cadena en tokens en C?
Respuesta
char *token;
char *state;
for (token = strtok_r(input, "&", &state);
token != NULL;
token = strtok_r(NULL, "&", &state))
{
...
}
lo haría algo como esto (usando strchr()
):
#include <string.h>
char *data = "this&&that&other";
char *next;
char *curr = data;
while ((next = strchr(curr, '&')) != NULL) {
/* process curr to next-1 */
curr = next + 1;
}
/* process the remaining string (the last token) */
strchr(const char *s, int c)
devuelve un puntero a la siguiente ubicación de c
en s
, o NULL
si c
ISN' t encontrado en s
.
Usted puede ser capaz de utilizar strtok()
, sin embargo, no me gusta strtok()
, porque:
- modifica la cadena que se tokenizados, por lo que no funciona para las cadenas literales, o no es muy útil cuando desea mantener la cadena para otros fines. En ese caso, debe copiar la cadena a una temporal primero.
- combina los delimitadores adyacentes, por lo que si su cadena fue
"a&&b&c"
, los tokens devueltos son"a"
,"b"
y"c"
. Tenga en cuenta que no hay un token vacío después de"a"
. - no es seguro para subprocesos.
Supongo que también depende de la implementación de C. En mi sistema, la cadena en sí no se modifica cuando llamo a strtok(). En realidad, ni siquiera veo cómo podría ser. Después de todo, solo tiene que producir punteros al comienzo de los diferentes tokens dentro de la cadena. –
Cees Meijer: 'strtok()' * does * modifica la cadena del argumento - los caracteres del delimitador se reemplazan por '\ 0', de modo que las cadenas devueltas terminan correctamente. – caf
'strtok' * tiene * para modificar la cadena si tiene que cumplir con los estándares. Desde el estándar C: * Si se encuentra ese carácter, se sobrescribe con un carácter nulo, que termina el token actual *. Esto es muy explícito. http://opengroup.org/onlinepubs/009695399/functions/strtok.html. ¿Puedes publicar un código donde 'strtok()' no modifique la cadena? –
Puede usar la función strok() como se muestra en el siguiente ejemplo.
/// Function to parse a string in separate tokens
int parse_string(char pInputString[MAX_STRING_LENGTH],char *Delimiter,
char *pToken[MAX_TOKENS])
{
int i;
i = 0;
pToken[i] = strtok(pInputString, Delimiter);
i++;
while ((pToken[i] = strtok(NULL, Delimiter)) != NULL){
i++;
}
return i;
}
/// The array pTokens[] now contains the pointers to the start of each token in the (unchanged) original string.
sprintf(String,"Token1&Token2");
NrOfParameters = parse_string(String,"&",pTokens);
sprintf("%s, %s",pToken[0],pToken[1]);
- 1. Cómo dividir una cadena en Java, ignorando múltiples tokens sucesivos
- 2. Detecta tokens particulares en una cadena. C#
- 3. cómo se divide una cadena con una cadena en C#
- 4. ¿Cómo divide strtok() la cadena en tokens en C?
- 5. ¿Cómo dividir una cadena en T-SQL?
- 6. C# Dividir una cadena por otra cadena
- 7. dividir una cadena en una matriz en C++
- 8. ¿Cómo dividir una cadena en una lista?
- 9. dividir una cadena en mayúsculas
- 10. Dividir una cadena en pares
- 11. dividir una cadena en Python
- 12. ¿Cómo puedo dividir una cadena en CSH?
- 13. cómo dividir una cadena en javascript
- 14. ¿Cómo dividir una cadena en Haskell?
- 15. ¿Cómo puedo dividir una cadena en make?
- 16. ¿Cómo dividir una cadena por una cadena en Scala
- 17. Dividir una cadena en una cadena, no un carácter
- 18. ¿Cómo se repiten los tokens en una cadena?
- 19. ¿Cómo reemplazar pares de tokens en una cadena?
- 20. cómo dividir cadena en NSMutableArray
- 21. División de C++ std :: cadena utilizando tokens, p. Ej. ";"
- 22. Dividir una cadena en palabras por múltiples delimitadores
- 23. Dividir una cadena en palabras y puntuación
- 24. Dividir una cadena en 2 en Python
- 25. dividir una cadena usando javascript
- 26. dividir una cadena en un separador
- 27. ¿Cómo puedo dividir esta cadena en una matriz?
- 28. ¿Cómo puedo dividir una cadena según los delimitadores en Qt?
- 29. ¿Cómo dividir una cadena CamelCase en sus subcadenas en Ruby?
- 30. Cómo dividir una cadena en matriz en PostScript
http://stackoverflow.com/questions/266357/tokenizing-strings-in-c –
Parece que la pregunta se refiere a la división de una cadena literal (aunque la cuestión es baja en los detalles, diciendo que "no se trabajo"). Esto puede o no ser lo que el OP quiere. Deberíamos darle la oportunidad de explicar eso. ¿Se está dividiendo la cadena en una cadena literal, o es de solo lectura? –