suma de ASCII

Iniciado por josri, 28 Marzo 2013, 08:12 AM

0 Miembros y 3 Visitantes están viendo este tema.

josri

Saludos, pues tengo un programa que lee de un archivo varias cadenas, estas tiene que sumar caracter por caracter su codigo ascii y luego sacarle modulo 131, por ejemplo: para la cadena enero los codigos son 101, 110, 101, 114 y 111 y la suma es 537 despues sacando modulo 131 sale 13

mi duda es en la siguinte parte:

                                                    .
                                                    .

suma=0;
while(!feof(archivo))
   {
       fscanf(archivo,"%[^\n]\n",cadena); //en esta parte lee cada cadena del archivo

       for(i=0; i<6; i++)
       {
           suma=suma+cadena[i]; //aqui suma caracter por caracter
       }

...codigo para mod...

   }

                                                     .
                                                     .



en vez de poner el ciclo "for", que puedo poner para que sume hasta que sea el final de la cadena en turno?, en el for puse 6 por que estaba empezando con "enero" pero las siguientes cadenas de menor o mayor tamaño cambia el valor de la suma real de caracteres, intente poner un --while(cadena!='\0')-- en vez del for, pero se quedaba sin hacer nada, el codigo para el mod ya lo hice inclusive si me sale segun el ejemplo pero les repito en cadenas de diferente longitud cambia el valor real.

Las cadenas la declare de la siguiente forma por si eso tiene algo que ver con algun error que cometo al intentar hacer el while...
char cadena[15];
de antemano gracias por la ayuda, saludos. :P

Maik33

#1
Si cadena en un array de char o un puntero de char (char [] o *char) puedes usar la funcion strlen de la libreria string.h. Si tienes:

char c[5];

y el contenido:

c[0]='H'
c[1]='o'
c[2]='l'
c[3]='a'
c[4]='\0' o vacio

strlen(c) te devuelve 4.

He probado sprintf(c,"Hola\0") y sprintf(c,"Hola") y el strlen me devuelve 4 en los 2 casos.

Almapa

Efectivamente, como ha dicho Maik33 puedes utilizar la función strlen y a partir de ahí ya lo puedes programar como un bucle for:

Código (cpp) [Seleccionar]
while(!feof(archivo))
    {
        fscanf(archivo,"%[^\n]\n",cadena);
        l=strlen(cadena);
        for(i=0; i<l+1; i++)
        {
            suma=suma+cadena[i];
        }
    }


o como un while

Código (cpp) [Seleccionar]
while(!feof(archivo))
    {
        fscanf(archivo,"%[^\n]\n",cadena);
        l=strlen(cadena);
        while(i<=l)
        {
            suma=suma+cadena[i];
            i++;
        }
    }


Un saludo

OmarHack

Perdón si la pregunta es tonta pero... ¿Qué hace "fscanf"?
I like to test things.

85

#4
Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/

OmarHack

Vale, ya entiendo. ¿Hay algún "fcin"? O hay algún código equivalente a "fscanf" en ansi c++, o fscanf ya es parte del ansi de c++ y no hay ningún equivalente en c++?
PD: Muchas gracias por tomarte las molestias de buscar las referencias. :)
Un saludo.
I like to test things.

josri


josri

Cita de: Almapa en 28 Marzo 2013, 12:04 PM


Cita de: Maik33 en 28 Marzo 2013, 08:53 AM


Listo ya quedo, ocupe el ciclo for que me habian mencionado, intente tambien con el while pero seguia sin hacer nada jajaja, pero con el for ya funciono, gracias por la ayuda, saludos. ;-)