Cambiar de String a natural

Iniciado por HIDE_95, 8 Septiembre 2015, 18:42 PM

0 Miembros y 2 Visitantes están viendo este tema.

HIDE_95

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

Bob1098

#1
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.

HIDE_95

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

Bob1098

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.

ivancea96

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 (cpp) [Seleccionar]
char c = '5';
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:

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


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

HIDE_95

Muchisimas gracias compañeros. Ya lo he entendido :D . Muy buena la explicacion ivancea :D