Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- typedef struct {
- char mail[321];
- int cont;
- }Correo;
- int comparar(const void *cadena1, const void *cadena2) {
- Correo *puntero1 = (Correo *) cadena1;
- Correo *puntero2 = (Correo *) cadena2;
- if(strcmp(puntero1 -> mail, puntero2 -> mail) > 0){
- return 1;
- }else{
- return 0;
- }
- }
- void dominiosYFrecuencia(FILE *entrada,FILE **salida){
- Correo *correo;
- char cadena[321] = {};
- char cadena2[256] = {};
- int i, j = 0, pos, largo, total = 0, flag;
- Correo aux;
- correo = (Correo*) malloc (sizeof(Correo));
- if(correo == NULL){
- exit(0);
- }
- while(fscanf(entrada,"%s",cadena) != EOF){
- pos = 0;
- largo = (int)strlen(cadena);
- //Ubicar la posicion del '@'
- do{
- if(cadena[pos] == '@'){
- pos++;
- break;
- }
- pos++;
- }while(pos < largo);
- //Se pasa a minuscula la cadena
- for(i = 0; i < largo; i++){
- cadena[i] = tolower(cadena[i]);
- }
- //Guardo SOLO los dominios en cadena2
- j=0;
- for(i = pos; i < largo; i++){
- cadena2[j] = cadena[i];
- j++;
- }
- flag = 0;
- //Reviso si el domino ya se encontraba en el vector
- for(i = 0; i < total; i++){
- if((strcmp(cadena2, correo[i].mail)) == 0){
- flag = 1;
- correo[i].cont += 1;
- break;
- }
- }
- //Guardar la nueva cadena
- if(flag == 0){
- strcpy( correo[total].mail, cadena2);
- correo[total].cont += 1;
- total++;
- correo = (Correo*) realloc (correo, (total+1)*sizeof(Correo));
- }
- //Limpiar la cadena2
- largo = (int)strlen(cadena2);
- for(i = 0; i < largo; i++){
- cadena2[i] = '\0';
- }
- }
- //Se ordena usando qsort
- qsort(correo, total, sizeof(Correo), &comparar);
- for(i = 0; i < total; i++){
- for(j = i+1; j < total; j++){
- if(correo[i].cont < correo[j].cont){
- aux = correo[i];
- correo[i] = correo[j];
- correo[j] = aux;
- }
- }
- }
- //Se Imprimen los datos ordenados
- for(i = 0; i < total; i++){
- printf("%s %d\n", correo[i].mail, correo[i].cont);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement