Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: HIDE_95 en 8 Septiembre 2015, 18:42 pm



Título: Cambiar de String a natural
Publicado por: HIDE_95 en 8 Septiembre 2015, 18:42 pm
Buenas, estoy haciendo un programa y me he quedado atascado en un subalgoritmo... En este subalgoritmo  le paso como parametro de entrada un string con digitos y simbolos( '+' o '-' ) y me tiene que devolver el resultado de la expresion puesta en la cadena de caracteres. Mi duda es como puedo pasar los digitos , por ejemplo , 123 a un numero natural para poder sumarlo. No se me ocurre nada , solo pasarlo caracter a caracter . Espero que me podais echar una mano. Gracias


Título: Re: Cambiar de String a natural
Publicado por: Bob1098 en 8 Septiembre 2015, 20:58 pm
Una idea que puedo darte sería comprobar si el carácter siguiente al que te encuentras (i+1) es un digito o no con la función isdigit() de ctype. Si no lo es, los caracteres que lleves contados los guardas y los conviertes en decimal utilizando funciones como atoi().

Espero que te haya ayudado.


Título: Re: Cambiar de String a natural
Publicado por: HIDE_95 en 8 Septiembre 2015, 22:41 pm
El profesor , no quiere que utilizemos ninguna biblioteca que no sea  la array , string o iostream para el diseño de este programa y el lenguaje c++... Pero muchas gracias de todas maneras


Título: Re: Cambiar de String a natural
Publicado por: Bob1098 en 8 Septiembre 2015, 23:20 pm
Bueno, puedes crear tu propia función para comprobar si es digito o no, comprobando si el carácter es '1', '2'.. etc. Y para la conversion vas a tener que currártelo un poco mas. Puedes guardar los valores en array de int.

Un saludo.


Título: Re: Cambiar de String a natural
Publicado por: ivancea96 en 8 Septiembre 2015, 23:27 pm
Si te doy un conjunto de datos (en papel), del tipo:

Primera cifra:  1
Segunda cifra:  8
Tercera cifra:  4

¿Sabrías, mediante operaciones aritméticas (concatenar no vale), formar el número?

Si la respuesta es sí, solo tienes que hacer eso mismo con código.
Dado un caracter '5', para convertirlo al número 5, tienes que restarle el valor ascii del 0. El valor ascii del 0 es 48, pero en C++ puedes poner simplemente:

Código
  1. char c = '5';
  2. int n = c - '0';

Ahora "n" es 5. Haces eso cada vez que necesites el valor numérico de un caracter.

Luego, si no sabes convertir una cadena a un número, es:

Código:
Cifras: 5 4 8 6
Numero = 5*10^3 + 4*10^2 + 8*10^1 + 6*10^0

O, abstrayendo el concepto:
Código:
Por cada cifra:
Numero = Numero + cifra*10^indice
Siendo el indice la posicion de la cifra, empezando desde 0 desde la derecha


Título: Re: Cambiar de String a natural
Publicado por: HIDE_95 en 8 Septiembre 2015, 23:39 pm
Muchisimas gracias compañeros. Ya lo he entendido :D . Muy buena la explicacion ivancea :D