Informatică, întrebare adresată de MigiToHidari, 9 ani în urmă

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

[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
email.out

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

Răspunsuri la întrebare

Răspuns de express
4
Ai aici sursa oficiala. Succes!
#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;

}

Alte întrebări interesante