Rezolvare completă PbInfo #851 Email

O adresă de email este alcătuită din numele de utilizator și numele de domeniu, separate prin simbolul @. De exemplu, gigel@pbinfo.ro este o adresă de email corectă ca structură, chiar dacă inexistentă.

Cerința

Se dă o listă de adrese de email corecte ca structură. Să se determine câte adrese de email sunt asociate cu fiecare nume de domeniu.

Date de intrare

Fișierul de intrare email.in conține mai multe adrese de email, câte una pe o linie.

Date de ieșire

Fișierul de ieșire email.out va conține pe prima linie numărul C de nume de domenii diferite. Următoarele C linii conțin câte un nume de domeniu, urmat de un spațiu și de numărul de adrese date asociate cu acel domeniu. Numele de domeniu se vor afișa în ordine descrescătoare a numărului de adrese asociate. Dacă există mai multe nume de domenii cu același număr de adrese asociate, se vor afișa în ordine lexicografică.

Restricții și precizări

  • fișierul de intrare va conține cel mult 1000 de adrese distincte, cu cel mult 200 de domenii distincte;
  • lungimea maximă a unei adrese de email este de 50 de caractere;
  • numele de domeniu începe după simbolul @ și se termină la sfârșitul adresei;
  • adresa de email nu conține spații sau alte caractere albe.

Exemplu

email.in

gigel@pbinfo.ro
gigel@yahoo.com
ionel.c@gmail.com
gigi@pbinfo.ro
vasile@yahoo.com
jr@gmail.com
qwerty@yahoo.com

email.out

3
yahoo.com 3
gmail.com 2
pbinfo.ro 2

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Email:

#include <fstream>
#include <iostream>
#include <cstring>
using namespace std;

ifstream fin("email.in");
ofstream fout("email.out");

int n, frecv[205];
char domenii[205][51];

int main()
{
    char email [51], * p;
    while(fin >> email)
    {
        p = strchr(email , '@') + 1;
        int poz = -1;
        for(int i = 0 ; i < n  && poz == -1 ; i ++)
            if(strcmp(domenii[i] , p) == 0)
                poz = i;
        if(poz == -1)
        {
            strcpy (domenii[n] , p);
            frecv[n] = 1;
            n ++;
        }
        else
            frecv[poz] ++;
    }
    p = email;
    for (int i = 0 ; i < n - 1 ; i ++)
        for(int j = i + 1 ; j < n ; j ++)
            if(frecv[i] < frecv[j])
            {
                int aux = frecv[i]; frecv[i] = frecv[j] ; frecv[j] = aux;
                strcpy(p , domenii[i]); strcpy(domenii[i], domenii[j]); strcpy(domenii[j] , p);
            }
            else
                if(frecv[i] == frecv[j])
                    if(strcmp(domenii[i] , domenii[j]) > 0)
                    {
                        strcpy(p , domenii[i]); strcpy(domenii[i], domenii[j]); strcpy(domenii[j] , p);
                    }
    fout << n << "\n";
    for(int i = 0 ; i < n ; i ++)
        fout << domenii[i] << " " << frecv[i] << "\n";
    return 0;
    
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #851 Email

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #851 Email de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!