Pregunta

¿Cómo analizo fichas de una cadena de entrada. Por ejemplo:

char *aString = "Hello world".

Quiero que la salida sea:

  

"Hola" "mundo"

¿Fue útil?

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

Tenga en cuenta que es strtok muy difícil de hacerlo bien, ya que:

  • Modifica la entrada
  • El delimitador se sustituye por un terminador nulo
  • Combina delimitadores adyacentes, y por supuesto,
  • No es seguro para subprocesos.

Puede leer acerca de este alternativa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top