Foros del Web » Programación para mayores de 30 ;) » Programación General »

Extrar caracteres y pasarlos a int en C

Estas en el tema de Extrar caracteres y pasarlos a int en C en el foro de Programación General en Foros del Web. Hola. Necesito ayuda para resolver un pequeño problema con cadenas. Tengo una cadena (xx). Como le hago para extraer las xx como int? Es decir, ...
  #1 (permalink)  
Antiguo 04/06/2005, 20:49
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Extrar caracteres y pasarlos a int en C

Hola.
Necesito ayuda para resolver un pequeño problema con cadenas.
Tengo una cadena (xx).
Como le hago para extraer las xx como int?
Es decir, las xx son un numero representado en cadena(char) y lo que quiero es pasarlo a un int, claro que sin parentesis ya que estos no son numeros.

Espro haberme explicado.

Saludos
  #2 (permalink)  
Antiguo 05/06/2005, 01:05
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Podes sacar el primer parentesis y usar atol() ya que esta funcion deja de procesar al encontrarse un caracter que no sea un numero.

Otra posibilidad es hacer el trabajo de atol uno mismo. Seria algo asi como ir multiplicando 10 a la cero y multiplicar ese resultado por el numero de la primera cifra, 10 a la uno y multiplicar ese resultado por el numero de la segunda cifra y etc. Se van sumando los resultados y se obtiene finalmente lo mismo que la funcion atol, la unica ventaja que tendrias es poder ignorar el parentesis de comienzo y asi usar la cadena tal como esta.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 05/06/2005, 08:16
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Bueno, prefiero usar el atol o atoi. El problema es como sacar esos parentesis?

Saludos
  #4 (permalink)  
Antiguo 05/06/2005, 08:22
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por Instru
Bueno, prefiero usar el atol o atoi. El problema es como sacar esos parentesis?

Saludos

Pues es batante sencillo...

atol(s+1)
  #5 (permalink)  
Antiguo 05/06/2005, 08:25
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Voy a intentar eso. Lo que no estaba seguro de usar eso es que si atol fallaria por encontrar el segundo parentesis(el de cierre).
Pero al parecer no hay ningun problema.
Graias por la ayuda.

Por cierto otra cosa.

Imaginesmos que la cadena tiene

(ccccc+xx)

donde las c son caracteres y las x numeros.

Ahora, si uso atoi(&cadena[7])
funcionara para sacar las xx(numeros)?

Saludos
  #6 (permalink)  
Antiguo 05/06/2005, 08:34
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por Instru
Voy a intentar eso. Lo que no estaba seguro de usar eso es que si atol fallaria por encontrar el segundo parentesis(el de cierre).
Pero al parecer no hay ningun problema.
Graias por la ayuda.

Por cierto otra cosa.

Imaginesmos que la cadena tiene

(ccccc+xx)

donde las c son caracteres y las x numeros.

Ahora, si uso atoi(&cadena[7])
funcionara para sacar las xx(numeros)?

Saludos
Como dijo Eternal Idol, la función se para al encontrarse con un caracter no númerico, a ver si leemos bien... ;)

atol(&cadena[7]) lo que hace es obtener primero el valor char de la cadena (lo cual está mal, tienes que pasar un puntero), para luego hacer la indirección hacia el puntero... cuando puedes simplemente sumar 7 (realmente no he comprobado como lo compila, supongo que se da cuenta de que con la suma lo hace, pero...)

Lo que tienes que hacer es simplemente sumar al puntero la posición. atol(s+7) a mi gusto... Pero si prefieres el tema de [] y &, pues también.

Antes de intentar programar cosas raras estudia bien el tema de punteros, estás bastante verde ;)

Última edición por MaxExtreme; 05/06/2005 a las 08:47
  #7 (permalink)  
Antiguo 05/06/2005, 08:59
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Jejeje, ok, gracias:

Cita:
Antes de intentar programar cosas raras estudia bien el tema de punteros, estás bastante verde ;)
En realidad si se manejar los puntero, pero como dices, a veces me pongo a hacer cosas raras y pues ahi salen errores y codigo extraño como el hace rato.
Lo unico que aun me cuesta mucho trabajo de punteros es el que son mas de uno:

int ***a
char *************milpunteros;

Esos si son complicadisimos pra mi. Aun no los puede razonar bien mi cabeza jajaja.
Pero el dia que realmente los necesito, nimodo, tendre que estudiarlos y aprenderlos a dominar.

Saludos
  #8 (permalink)  
Antiguo 05/06/2005, 09:05
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por Instru
Jejeje, ok, gracias:



En realidad si se manejar los puntero, pero como dices, a veces me pongo a hacer cosas raras y pues ahi salen errores y codigo extraño como el hace rato.
Lo unico que aun me cuesta mucho trabajo de punteros es el que son mas de uno:

int ***a
char *************milpunteros;

Esos si son complicadisimos pra mi. Aun no los puede razonar bien mi cabeza jajaja.
Pero el dia que realmente los necesito, nimodo, tendre que estudiarlos y aprenderlos a dominar.

Saludos
Realmente tanto puntero sólo se usa para arrays tridimensionales, punteros a éstos, para ofuscar código o para hacer paridas en general. Que yo recuerde, útil sólo me fue una vez usar un cuádruple puntero, que apuntaba a otro puntero que apuntaba a una matriz bidimensional de estructuras de tres bytes (RGB) que representaba un mapa de bits. Y la verdad...
  #9 (permalink)  
Antiguo 05/06/2005, 16:39
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Bueno, Aprovecho el post para preguntar una cosa mas.

Como le hago para que el atio me lea caracteres en hexadecimal, poe ejemplo, si tengo ($FF),
como le hago para que en el int me de resultado 255??

Saludos
  #10 (permalink)  
Antiguo 06/06/2005, 00:13
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Que yo sepa no se puede, te tocaria hacer lo que te explique en mi primer post pero usando 16 en vez de 10 y creando una funcion que te devolviera el valor de los caracteres que forman la notacion hexadecimal (A-F).
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #11 (permalink)  
Antiguo 06/06/2005, 08:45
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Huy, entonces va a estar algo complicado porque lo voy a tener que hacer manual.
Buneo, si alguien tiene una solucion, mejor.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:22.