[C] Contador de dígitos

Iniciado por GGZ, 17 Septiembre 2015, 05:31 AM

0 Miembros y 1 Visitante están viendo este tema.

GGZ

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
LET'S DO STUFF!!

engel lex

esto es un aporte, una duda o que?

al código le falta el return del final
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

GGZ

Ahí lo acabo de editar ya puse mi duda, perdón!
LET'S DO STUFF!!

engel lex

Código (cpp) [Seleccionar]
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 (++)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

GGZ

#4
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.
LET'S DO STUFF!!

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.