Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DA KILLER en 29 Marzo 2011, 13:43 pm



Título: Consulta [C++]
Publicado por: DA KILLER en 29 Marzo 2011, 13:43 pm
Buenas, lamento molestar por esta pequeñez, pero es que no como buscarla en internet, creo que es un tipo de abstracción de datos, pero al buscarlo de dicha manera me salen las formas de armar estructuras, y por ahora estoy con lo básico.

Lo que yo deseo es tomar "x" caracteres de una variable, en este caso los dos primeros, pero la variable es de tipo int, no char y quería saber si se puede hacer de otra manera que no sea mediante un array en char.

Por si no se me entiende lo dejo en Batch

Código
  1. @REM Esto es lo que quisiera hacer en C/C++...
  2. @Echo Off
  3. Setlocal EnableExtensions EnableDelayedExpansion
  4. Color 0A
  5. :: Declaracion de Variables
  6. Set "var="
  7. Set "deseado="
  8. Echo.
  9. Set /P "var=Por favor ingrese un numero entero: "
  10. Set "deseado=!var:~0,2!
  11. Echo. Presione [Cualquier Tecla] para Salir...
  12. Pause >nul
  13. Exit /B %errorlevel%
  14.  

De nuevo disculpen las molestias y Desde Ya muchas Gracias.


Título: Re: Consulta [C++]
Publicado por: Akai en 29 Marzo 2011, 13:50 pm
Tu opción más "rentable" pasa por imprimir con sprintf o usar un stringstream para obtener el entero en una cadena, y entonces seleccionar los dos primeros carácteres.

aquí se discutió el tema hace poco.

http://foro.elhacker.net/programacion_cc/referencia_de_un_char_en_una_funcionakai_pasate_por_favor_que_modificadoxd-t322721.0.html

Por otro lado, si no quieres usar eso, tu otra opción es primero obtener el módulo 10 del número (último dígito) y luego dividir entre 10 mientras el número sea mayor que 0. Obviamente, tendrías que ir guardando en algún lado el último y penúltimo resultado del módulo.

consejo? lo primero es menos trabajo.


Título: Re: Consulta [C++]
Publicado por: DA KILLER en 29 Marzo 2011, 15:03 pm
Creo que me quedaré con el array  :P, veo que me falta mucho por conocer para tener aunque sea las bases del lenguaje, muchas gracias y cuando vuelva a mi casa subo el code del array por si alguien después lo pudiese usar para algo y se acaba el post.

De nuevo muchas gracias y cualquier consejo que me puedan dar para comenzar será bienvenido.


Título: Re: Consulta [C++]
Publicado por: Garfield07 en 29 Marzo 2011, 18:28 pm
Y si usases la función itoa (o algo así, es la hermana de atoi). Te pasa un int a un char, y lo puedes leer más sencillamente. Se me ocurre otra cosa más compleja, pero es lo más fácil...


Título: Re: Consulta [C++]
Publicado por: Akai en 29 Marzo 2011, 19:09 pm
El problema, Sagrini, es que pese a que atoi es parte del estándar, itoa no lo es. Y eso puede dar problemas. Usar sprintf o sstreams (string-streams) solventa el tema sin recurrir a salirse del estandar.

Sobre itoa en http://cplusplus.com/reference/clibrary/cstdlib/itoa/

Portability
This function is not defined in ANSI-C and is not part of C++, but is supported by some compilers.

A standard-compliant alternative for some cases may be sprintf:
sprintf(str,"%d",value) converts to decimal base.
sprintf(str,"%x",value) converts to hexadecimal base.
sprintf(str,"%o",value) converts to octal base.


Título: Re: Consulta [C++]
Publicado por: DA KILLER en 30 Marzo 2011, 13:43 pm
Bueno finalmente decidí que sería más simple declarar una varible char en lugar de int y copiar los caracteres.

Dejo el código:

Código
  1. [...]
  2. char var1 [200] = "1995";
  3. char vared [12] = " ";
  4. vared [0] = var1[0];
  5. vared [1] = var1[1];
  6. [...]
  7.  

Antes no me funcionaba porque no había definido la variable "vared".

Saludos, gracias y perdón de nuevo por las molestias.


Título: Re: Consulta [C++]
Publicado por: Garfield07 en 2 Abril 2011, 20:48 pm
Pues hace tiempo pensé en crear una librería personal con funciones reprogramadas útiles del día a día, para ver cómo iban. No lo empecé, pero la función que buscamos puede ser fácil de programar... Ahora no tengo ningunas ganas, pero si queréis saber cómo sería más o menos decídmelo ;) Sería coger cada cifra (dividir entre 10*X y quitar decimales) y pasarla a su correspondiente en ASCII. No más de diez líneas ;)

Un saludo!
Sagrini