¿Cómo analizo una muestra de una cadena en C?
Pregunta
¿Cómo analizo fichas de una cadena de entrada. Por ejemplo:
char *aString = "Hello world".
Quiero que la salida sea:
"Hola" "mundo"
Solución
Usted va a querer utilizar strtok
- aquí es un buen ejemplo.
Otros consejos
Tome un vistazo a strtok , parte de la biblioteca estándar .
strtok
es la respuesta fácil, pero lo que realmente necesita es un analizador léxico que lo hace correctamente. Considere lo siguiente:
- ¿hay uno o dos espacios entre "hola" y "mundo"?
- podría ser que, de hecho cualquier cantidad de espacios en blanco?
- podrían que incluir espacios en blanco vertical (\ n, \ f, \ v) o simplemente horizontal (\ s, \ t, \ r)?
- podría incluir que los caracteres Unicode de espacios en blanco?
- si había puntuacion entre las palabras, ( "hola, mundo"), sería la puntuacion una ficha separada, parte de "hola", o ignorado?
Como se puede ver, escribir un analizador léxico adecuado no es sencillo, y strtok
no es un analizador léxico adecuado.
Otras soluciones podrían ser una sola máquina de carácter estatal que hace exactamente lo que necesita, o solución basado en expresiones regulares que hace que la localización palabras frente a las brechas más generalizadas. Hay muchas maneras.
Y, por supuesto, todo esto depende de cuáles son sus necesidades reales son, y yo no los conozco, así que empieza con strtok
. Pero es bueno estar al tanto de las diversas limitaciones.
En versiones reentrantes También se puede usar strtok_s para estudio visual o strtok_r para UNIX