[ Foro de C# ]

String a Int y suma

19-Jun-2017 10:17
Toni Alonso
4 Respuestas

Buenas!
Estoy teniendo problemas con un ejercicio, en el que tengo que introducir un número como cadena y luego sumar las cifras. Cuando estaba intentando hacerlo, me metí en algo que aún entiendo menos. Mi código es:
                       string numeroAConvertir = "12345";
int []numero=new int[numeroAConvertir.Length];
int suma = 0;
for (int n = 0; n < numeroAConvertir.Length; n++) {
Console.WriteLine ("El numero a convertir "+numeroAConvertir [n]);
numero [n] = Convert.ToInt32 (numeroAConvertir[n]);
Console.WriteLine ("El dato del array resultante"+numero[n]);
suma = suma + numero [n];
Console.WriteLine (suma);
}
En el bucle decidí mostrar los datos que voy convirtiendo para ver que pasaba y no entiendo como al hacer la linea de conversion el dato pasa de 1 a 49 y los siguientes son 50,51,52...
Seguro que es una chorrada, pero no lo pillo.
Gracias anticipadas


19-Jun-2017 10:56
Invitado (Caranim)

       string numeroAConvertir = "12345";
int []numero=new int[numeroAConvertir.Length];

** Con esto creas un array de cinco enteros, sin inicializar.

int suma = 0;
for (int n = 0; n < numeroAConvertir.Length; n++) {
Console.WriteLine ("El numero a convertir "+numeroAConvertir [n]);

** numeroAConvertir[n] devuelve el carácter de la posición "n". Lo inicializaste al principio a "12345".

numero [n] = Convert.ToInt32 (numeroAConvertir[n]);

** En la tabla número parece que cargas el carácter de la posición "n" convertido a entero, o al menos eso es lo que yo pensé al primer vistazo que debería hacer, pero en la práctica te guarda el valor como entero del código ASCII del carácter n-simo de la cadena "12345". El ASCII "48" representa el carácter "0", el "49" el "1"...

Console.WriteLine ("El dato del array resultante"+numero[n]);
suma = suma + numero [n];
Console.WriteLine (suma);
}

La primera vez "suma" vale 0 + el ASCII del número "1" ( 49 ) y es lo que escribimos.
La segunda vez vale 49 + el ASCII del número "2" (50) y escribimos el 99 resultante.
...


Espero que te haya ayudado.

Un saludo.



19-Jun-2017 12:01
Toni Alonso

Ahhh, entonces lo que me falta es poder convertir de string a int sin que me lo haga en ASCII. Cosa que no se como hacerlo, he modificado la linea de conversión a esto:
numero [n] = Convert.ToInt32 (numeroAConvertir[n],10);
Y me dice que tiene argumentos no válidos. Será por ser un array...

No entiendo porque lo hace así por defecto cuando en una operación habitual como esta:
Console.WriteLine ("Introduce el numero: ");
numero = Convert.ToInt32 (Console.ReadLine ());

Ya convierte directamente el string en numero entero


20-Jun-2017 12:11
Invitado (Caranim)

*** Y me dice que tiene argumentos no válidos. Será por ser un array...

No. El error de esa línea es porqué la función no está sobrecargada con esos parámetros.

*** No entiendo porque lo hace así por defecto cuando en una operación habitual como esta:
Console.WriteLine ("Introduce el numero: ");
numero = Convert.ToInt32 (Console.ReadLine ());

Yo lo he sorteado convirtiendo el carácter a string y después convertir desde ahí a entero. Eso me ha funcionado.


21-Jun-2017 11:12
Toni Alonso

Bueno, tras mucho romperme los cuernos y gracias a los consejos de Caranim lo he conseguido.
Lo que estaba intentado era que si un usuario da una serie de números como string, se pudiesen sumar sus cifras. Seguro que hay una manera más sencilla pero yo soy nuevo :D
Dejo aquí el código por si alguien tiene el mismo problema:


			string numerosLetras="12345";
			string letraConvertida;
			int numero;
			int suma=0;
			for (int n=0;n<numerosLetras.Length;n++){
				letraConvertida=Convert.ToString (numerosLetras[n]);
				numero=Convert.ToInt32 (letraConvertida);
				suma=suma+numero;
			}
			Console.WriteLine (suma);






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)