duda con un código

duda con un código

de Nataly Melanie Ruber Maimo -
Número de respuestas: 4

hola tengo una duda con este código del libro:


la parte donde dice  ++ndigit[c-'0'], no entiendo bien eso, o sea entiendo que c-'0' representa el valor del dígito, pero por ejemplo si mi primer dígito es 9, entonces ese 9 se debe guardar en el arreglo ndigit, entonces al hacer ++ndigit[c-'0'] debería guardarse 9 tal que ndigit[0]=9, pero no entiendo cómo se está guardando en la expresión ++ndigit[c-'0'], ya que no veo qué se debería incrementar, yo colocaría algo más como ndigit[i] = c-'0', o algo por el estilo

En respuesta a Nataly Melanie Ruber Maimo

Re: duda con un código

de Leopoldo Agorio -
Hola Nataly

La sentencia ++ndigit[c-'0'] en realidad es una forma de incrementar el elemento correspondiente en el arreglo ndigit para el dígito que se está leyendo.

En este caso, c-'0' es una forma de convertir el carácter c, que representa un dígito del 0 al 9, en un número entero del 0 al 9. Esto se debe a que en la tabla ASCII, los caracteres '0' a '9' tienen valores consecutivos, es decir, '0' tiene el valor 48, '1' tiene el valor 49, '2' tiene el valor 50, y así sucesivamente. Por lo tanto, si restamos el valor de '0' (48) al valor del carácter que estamos leyendo, obtendremos el número entero que representa ese dígito.

Entonces, ++ndigit[c-'0'] incrementa el elemento en el arreglo ndigit correspondiente al dígito que estamos leyendo. Por ejemplo, si estamos leyendo el carácter '9', entonces c-'0' será 9, y ++ndigit[c-'0'] incrementará ndigit[9], que es el elemento del arreglo que corresponde al dígito 9.

En resumen, la expresión ++ndigit[c-'0'] es una forma más compacta y eficiente de actualizar el arreglo ndigit para el dígito que se está leyendo, sin tener que usar un bucle o una instrucción condicional para encontrar el índice correspondiente en el arreglo.
En respuesta a Leopoldo Agorio

Re: duda con un código

de Nataly Melanie Ruber Maimo -
pero si lo aumenta entonces ndigit[9] = 1, no veo la lógica de eso, ya que si leyera 1, 9, 3, entonces obtendría ndigit[1]=1 ndigit[9]=1 ndigit[3]=1 entonces quedaría dígitos : 1 1 1. El while debería meterlo en bucle para que aumente hasta donde debe de aumentar supongo, pero no lo estoy viendo
En respuesta a Nataly Melanie Ruber Maimo

Re: duda con un código

de Denis Gabriel Peña Presa -
Hola Nataly, el código lo que hace es contar cuántas veces aparece cada dígito en un archivo de texto , lo dice en el primer comentario del código que pasaste.
Saludos.
En respuesta a Denis Gabriel Peña Presa

Re: duda con un código

de Leopoldo Agorio -
Para aclarar nomás:
el código cuenta de la standard input, no de ningún archivo.
Y el resultado esperado es el que planteó Nataly, en caso de recibir 1,9,3, obtendría ndigit[1]=1 ndigit[9]=1 ndigit[3]=1 . En caso de obtener 0,1,2,3,4,5,6,7,8,9,1,9,3, obtendría ndigit[0]=1 ndigit[1]=2 ndigit[2]=1 ndigit[3]=2 ndigit[4]=1 ndigit[5]=1 ndigit[6]=1 ndigit[7]=1 ndigit[8]=1 ndigit[9]=2.