Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* ENTRADA.TXT EN LA MISMA CARPETA DEL PROGRAMA, GENERA SALIDA.TXT EN EL MISMO LUGAR
- el programa actua como contador de dominios, guardando en un archivo de salida los dominios ordenados descendentemente en el siguiente orden de prioridad:
- - total de cuentas vinculadas al mismo dominio
- - orden alfabetico
- ejemplo :
- input (entrada.txt):
- JUANPEREZ@GMAIL.COM ana@gmail.com
- pedro.piedra@gmail.com atenea.pug@gmail.com
- juana.gomez@PUCV.CL Rodrigo.fernandez@upm.es catalina.griffiths@pucv.cl
- ana.ruiz@upla.cl DELIA.ibacache@upla.cl
- maria.fernandez@UPM.ES
- output (salida.txt):
- gmail.com 4
- pucv.cl 2
- upla.cl 2
- upm.es 2
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
- typedef struct facebook{
- char dominio[256];
- unsigned long long total;
- }facebook;
- int compara(const void *a, const void *b) //orden descendente, prioridad: cantidad de dominios, orden alfabetico
- {
- const facebook *p = a;
- const facebook *q = b;
- unsigned long long cmp = q->total - p->total;
- if(!cmp) return strcmp(p->dominio, q->dominio);
- return cmp;
- }
- void dominiosYFrecuencia(FILE *entrada,FILE **salida)
- {
- facebook *base = NULL;
- char correo[321]; //guarda cada correo ingresado
- int i, j;
- unsigned long long cuentas = 0; //total de cada dominio
- while(fscanf(entrada, "%s", correo) != EOF) {
- /* se guarda solo el dominio (lo que sigue al @)*/
- for(i=0 ; correo[i]!='@' && i!=strlen(correo); i++); i++;
- if(i == strlen(correo)+1) {
- printf("ADVERTENCIA: %s no es un correo electronico\n", correo);
- continue;
- }
- j=0;
- while(correo[i]) {
- correo[j] = tolower(correo[i]);
- i++;
- j++;
- }
- correo[j]='\0';
- /* se van sumando el total de cada dominio, si no se encuentra se almacena*/
- for(i=0 ; i<cuentas ; i++) {
- if(!strcmp(correo, base[i].dominio)) {
- base[i].total++;
- break;
- }
- }
- if(i == cuentas) {
- base = realloc(base, sizeof(facebook)*(cuentas+1));
- strcpy(base[cuentas].dominio, correo);
- base[cuentas].total = 1;
- cuentas++;
- }
- }
- /* se guardan los datos ordenados*/
- if(cuentas) {
- qsort(base, cuentas, sizeof(facebook), compara);
- for(i=0 ; i<cuentas ; i++) {
- fprintf(*salida, "%s %llu\n", base[i].dominio, base[i].total);
- }
- }
- free(base);
- }
- int main(int argc, char **argv)
- {
- FILE *entrada, *salida;
- entrada = fopen("entrada.txt", "r");
- salida = fopen("salida.txt", "w");
- dominiosYFrecuencia(entrada,&salida);
- fclose(entrada);
- fclose(salida);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement