Autor Tema: Leer cadena cuya longitud desconozco  (Leído 2519 veces)

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Leer cadena cuya longitud desconozco
« en: 14 de Abril de 2011, 02:19:24 am »
Hola,

Resulta que un amigo me pidió que lo ayudara en una aplicación de consola en C++, pero he estado teniendo muchos problemas con la lectura de cadenas. ¿Cuál es la forma más correcta para hacerlo?

Comunidad PHPeros

Leer cadena cuya longitud desconozco
« en: 14 de Abril de 2011, 02:19:24 am »

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:Leer cadena cuya longitud desconozco
« Respuesta #1 en: 14 de Abril de 2011, 11:11:17 am »
En C++ has probado a usar cin con getline??

string cadena;
getline(cin, cadena);

Saludos!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Re:Leer cadena cuya longitud desconozco
« Respuesta #2 en: 14 de Abril de 2011, 15:39:16 pm »
En C++ has probado a usar cin con getline??
string cadena;
getline(cin, cadena);
Saludos!
Sí, y recuerdo que tenía un error extraño que iba de la siguiente forma:

- Primera lectura: ASDASDASDASDA
- Segunda lectura:-Tercera lectura: 0312329

O sea, que cuando hacía la primera lectura, y tocaba la segunda, se sobreponía la tercera.

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:Leer cadena cuya longitud desconozco
« Respuesta #3 en: 15 de Abril de 2011, 00:48:44 am »
Bueno, eso puede depender del código que esté usando, pero mira este ejemplo
http://www.cplusplus.com/reference/iostream/istream/getline/
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Re:Leer cadena cuya longitud desconozco
« Respuesta #4 en: 15 de Abril de 2011, 02:13:12 am »
Bueno, eso puede depender del código que esté usando, pero mira este ejemplo
http://www.cplusplus.com/reference/iostream/istream/getline/
Pero en esos ejemplos se utilizan arreglos de caracteres, por lo tanto utilizan una cantidad fija de caracteres. ¿No importa si utilizo una cantidad menor a los 256 caracteres?

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:Leer cadena cuya longitud desconozco
« Respuesta #5 en: 15 de Abril de 2011, 15:14:12 pm »
No, claro que no pasa nada.
Simplemente estarías gastando algunos bytes, pero que son 100 bytes al fin y al cabo? No supone nada malo.
Lo malo sería que gastaras mas bytes de los que tiene tu arreglo, entonces si sería una amenaza, pero getline siempre lee el numero de caracteres que les pases, así que con que te asegures de que coincide con el arreglo que tienes no pasa nada (como en el ejemplo que te pasé).

No te preocupes si te haces el arreglo de 256 y luego solo usas 6, eso pasa muchas veces.
Ahora bien, si puedes evitarlo mejor. Si por ejemplo quieres guardar un nombre (sin apellidos) de una persona es ridículo que reserves 256, puesto que no vas a gastar mas de 15 (o incluso menos).

Saludos
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Re:Leer cadena cuya longitud desconozco
« Respuesta #6 en: 16 de Abril de 2011, 00:26:32 am »
No, claro que no pasa nada.
Simplemente estarías gastando algunos bytes, pero que son 100 bytes al fin y al cabo? No supone nada malo.
Lo malo sería que gastaras mas bytes de los que tiene tu arreglo, entonces si sería una amenaza, pero getline siempre lee el numero de caracteres que les pases, así que con que te asegures de que coincide con el arreglo que tienes no pasa nada (como en el ejemplo que te pasé).

No te preocupes si te haces el arreglo de 256 y luego solo usas 6, eso pasa muchas veces.
Ahora bien, si puedes evitarlo mejor. Si por ejemplo quieres guardar un nombre (sin apellidos) de una persona es ridículo que reserves 256, puesto que no vas a gastar mas de 15 (o incluso menos).

Saludos
Ah excelente, es que no sabía realmente como trabajaba eso en C++, ya que como el único lenguaje serio con el que he trabajado puramente es Java, ahí no se podría hacer algo como eso porque tiraría muchas excepciones del tipo NullPointerException cuando intenta acceder a espacios no ocupados de un arreglo, aunque claro acá ya existe una clase para tratar las cadenas y tal.

Muchas gracias por la aclaración :)