Buenas!
#include <stdio.h>
int main() {
int c, i;
int ndigit[10];
for (i = 0; i < 10; i = i + 1) {
ndigit[i] = 0;
}
while ((c = getchar()) != EOF) {
if ( c >= '0' && c <= '9') {
++ndigit[c - '0'];
}
}
//Muestra OMIT
for (i = 0; i < 10; i = i + 1) {
printf("%d -> %d\n", i, ndigit[i]);
}
}
No entiendo esta línea ++ndigit[c - '0']; si le sacás el '0' no funciona.
¿Por qué, para qué sirve eso?
Saludos
esto es un aporte, una duda o que?
al código le falta el return del final
Ahí lo acabo de editar ya puse mi duda, perdón!
if ( c >= '0' && c <= '9') {
++ndigit[c - '0'];
}
si c está entre '0' y '9' (recordando que son char porque están entre comillas)
a ndigit en la posición x (si c es un char de un numero, entonces al restarle '0' quedaría tabulado a 0) se le suma 1...
es decir...
si el numero es '3' que vale 51... si a 51 le restamos 48 (que es '0') nos queda 3, entonces a ndigit[3] se le suma 1 (++)
Claro, ahora entendo lo que decís pero si yo hago un ++ndigit[(int)c];
¿Qué estaría haciendo ahí , por qué no funcioan eso?
¿ Debería usar atoi ?
Edit: No tampoco
O sea si quiero pasar de un char a un int pero de otra manera.
no e necesario atoi ahí, está bien como se usa ahí el código... a pesar que los char sean interpretados como letras por las impresiones de sistema, también son interpretados como números porque básicamente eso son