elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Secuencias en C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Secuencias en C++  (Leído 9,991 veces)
eleon

Desconectado Desconectado

Mensajes: 99


Ver Perfil
Secuencias en C++
« en: 23 Enero 2012, 17:59 pm »

Buenas tardes:

Estoy buscando la forma de introducir secuencias en C++, esto es, leer (cin) un texto o una secuencia de números de los cuales no sabemos cuál va a ser el tamaño. He buscado por internet y he encontrado cosas acerca de la librería string pero por lo que he visto es obligatorio indicar el número de elementos que va a tener la secuencia.

Las tablas (o arrays) no me sirven puesto que como ya he comentado la diferencia entre una tabla y una secuencia es que en la secuencia no sabemos cuántos elementos se van a introducir.

Gracias y saludos.


En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: Secuencias en C++
« Respuesta #1 en: 23 Enero 2012, 18:20 pm »

Usa clases de la STL como list, vector, deque... te permiten modificar su tamaño dinamicamente:

http://cplusplus.com/reference/stl/

concretamente:

http://cplusplus.com/reference/stl/vector/

http://cplusplus.com/reference/stl/list/

http://cplusplus.com/reference/stl/deque/


En línea

eleon

Desconectado Desconectado

Mensajes: 99


Ver Perfil
Re: Secuencias en C++
« Respuesta #2 en: 23 Enero 2012, 18:44 pm »

Gracias por tu tiempo, en lo que me respondían he seguido buscando por internet y encontré lo esto: http://www.clubdesarrolladores.com/articulos/mostrar/70-cpp-string-class-clase-cpp-para-cadenas-de-caracteres

He compilado el siguiente código usando la información de ese artículo:

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6.    string s1;
  7.  
  8.    cin >> s1;
  9.    cout << s1 << endl;
  10.    cout << s1[4];
  11.    cin;
  12.    return 0;
  13. }

Bien, el caso es que no da ningún error y al usar la función "string" no necesito definir el tamaño. Como podéis observar con el "cin" capturo tantos caracteres como introduzca el usuario, luego puedo imprimir el mensaje completo o acceder a solo uno de los elementos.

El único contra que he encontrado es que si introduces un texto con espacios, no guarda lo que haya después de un espacio.

Mi duda es: ¿es correcto el uso de esta forma del "string"?. ¿Hay alguna forma de manipular esta función para que también guarde los espacios y lo que haya después?. ¿Hay algún otro tipo de "string" que lea números-operandos?, es decir, no el caracter "1" sino el número 1 con el que se puede operar.

PD: Le echaré un vistazo a los links Akai.
« Última modificación: 23 Enero 2012, 19:10 pm por eleon » En línea

eleon

Desconectado Desconectado

Mensajes: 99


Ver Perfil
Re: Secuencias en C++
« Respuesta #3 en: 23 Enero 2012, 21:46 pm »

Buenas:

A ver si me podéis responder otra duda: en las tablas y strings ¿siempre hay que dejar un último elemento para la marca final (\0)?, quiero decir, si queremos crear una tabla o un string de 30 elementos, hacemos "string cadena[30]", donde podemos usar los espacios del 0 al 29 (30 elementos) pero nunca el último (posición 30), ¿es asi?. Esto lo digo porque en el caso del string me da error si intento utilizar el último elemento, sin embargo en una tabla normal no da error ("char tabla[30]"), suponía que el string era una clase que definía una tabla y unas funciones asi que en cuanto a elementos se debería comportar igual.

Akai, he mirado los links y he encontrado esta otra página donde vienen explicados los vectores de forma más sencilla y en castellano: http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C%2B%2B/Biblioteca_Est%C3%A1ndar_de_Plantillas/Vectores

Lo que ocurre es que aqui el vector no lo define en una clase sino dentro del main, ¿es lo mismo que lo que tú me has indicado?.

Perdonad las molestias. Saludos!
« Última modificación: 23 Enero 2012, 21:50 pm por eleon » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Secuencias en C++
« Respuesta #4 en: 24 Enero 2012, 01:28 am »

El único contra que he encontrado es que si introduces un texto con espacios, no guarda lo que haya después de un espacio.

Mi duda es: ¿es correcto el uso de esta forma del "string"?
Es correcto. En cuanto a leer una linea de texto puedes utilizar la función "getline", si necesitas ejemplos de su uso utiliza el buscador de los foros.

A ver si me podéis responder otra duda: en las tablas y strings ¿siempre hay que dejar un último elemento para la marca final (\0)?
Solo si se trata de un array de caracteres (por ejemplo "char linea[100]") y en el se piensa almacenar una cadena (el '\0' indica el final de ella).

quiero decir, si queremos crear una tabla o un string de 30 elementos, hacemos "string cadena[30]", donde podemos usar los espacios del 0 al 29 (30 elementos) pero nunca el último (posición 30), ¿es asi?.
Me parece una confusión:

* Con los arrays de caracteres no hay opción mas que reservar un elemento para el cero porque es obligatorio (si no hay '\0' no hay cadena).

* Cuando se declara un array se indica el numero de elementos, por ejemplo:
Código
  1. string linea[100];
Esa declaración indica que el array consta de 100 elementos a los cuales se accede mediante los indices 0 .. 99. El elemento "linea[100]" no existe ya que seria el indice del elemento 101 y no hay tal en el array.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
eleon

Desconectado Desconectado

Mensajes: 99


Ver Perfil
Re: Secuencias en C++
« Respuesta #5 en: 24 Enero 2012, 15:46 pm »

Citar
Me parece una confusión:

* Con los arrays de caracteres no hay opción mas que reservar un elemento para el cero porque es obligatorio (si no hay '\0' no hay cadena).

* Cuando se declara un array se indica el numero de elementos, por ejemplo:
Código

Código
  1. string linea[100];

Esa declaración indica que el array consta de 100 elementos a los cuales se accede mediante los indices 0 .. 99. El elemento "linea[100]" no existe ya que seria el indice del elemento 101 y no hay tal en el array.

Vale, si me había confundido en ese aspecto, gracias por aclarármelo. Por lo tanto en un string si lo declaramos con 100 elementos (índices del 0 al 99) podremos usar 99 elementos (índices del 0 al 98) ya que el último es la marca de fin.

Lo de cin.getline me ha venido de perlas, gracias por vuestro tiempo. Saludos!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
errores en secuencias de comando | browser
Programación Visual Basic
juancho77 7 4,170 Último mensaje 23 Agosto 2008, 11:17 am
por juancho77
¿Qué secuencias son?.
GNU/Linux
Jenag 2 2,446 Último mensaje 27 Noviembre 2012, 21:16 pm
por Jenag
[Ayuda]Secuencias
Programación C/C++
Sothu 7 2,934 Último mensaje 19 Noviembre 2015, 16:18 pm
por Zodiak98
Secuencias de escape no encontrada
Programación C/C++
Raiden 3 2,573 Último mensaje 8 Agosto 2020, 05:29 am
por Raiden
Secuencias enfoque Criptográfico « 1 2 3 »
Criptografía
FFernandez 20 13,368 Último mensaje 5 Diciembre 2021, 16:41 pm
por fzp
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines