Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: GGZ en 17 Septiembre 2015, 05:31 AM

Título: [C] Contador de dígitos
Publicado por: GGZ en 17 Septiembre 2015, 05:31 AM
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
Título: Re: [C] Contador de dígitos
Publicado por: engel lex en 17 Septiembre 2015, 05:32 AM
esto es un aporte, una duda o que?

al código le falta el return del final
Título: Re: [C] Contador de dígitos
Publicado por: GGZ en 17 Septiembre 2015, 05:33 AM
Ahí lo acabo de editar ya puse mi duda, perdón!
Título: Re: [C] Contador de dígitos
Publicado por: engel lex en 17 Septiembre 2015, 05:41 AM
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 (++)
Título: Re: [C] Contador de dígitos
Publicado por: GGZ en 17 Septiembre 2015, 05:56 AM
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.
Título: Re: [C] Contador de dígitos
Publicado por: engel lex en 17 Septiembre 2015, 06:16 AM
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