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 mult200
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 .
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!