Problemă rezolvată șir de caractere clasa a XI-a mate-info neintensiv #6

Enunț

Se citește de la tastatură un șir de maxim 70 caractere. Să se afișeze, unul sub altul, caracterele distincte din șir împreună cu frecvențele lor de apariție. Pe fiecare rând se va afișa un caracter urmat de frecvența sa în șir (prin frecvența de apariție a unui caracter se înțelege de câte ori apare caracterul respectiv în șir). Exemplu: Dacă se citește șirul "abracadabra", programul a afișa ceea ce apare în figură.

Rezolvare

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


int main()
{
 char s[71];
 int l;


 cout << "Introduceti un sir: ";
 cin >> s;


 l = strlen(s);

 char caractere[30];
 int lCaractere = 0;


 int frecvente[30];

 for (int i = 0; i < l; ++i)
 {
  bool existaDeja = false;
  for (int j = 0; j < lCaractere; ++j)
  {
   if (caractere[j] == s[i])
   {
    existaDeja = true;


    ++frecvente[j];

    break;
   }
  }


  if (!existaDeja)
  {
   ++lCaractere;
   caractere[lCaractere - 1] = s[i];
   frecvente[lCaractere - 1] = 1;
  }
 }


 for (int i = 0; i < lCaractere; ++i)
 {
  cout << caractere[i] << " ->   " << frecvente[i] << endl;
 }


 return 0;
}

Vizual

Explicații

O implementare alternativă ar folosi clasa map din S.T.L.

Niciun comentariu:

Trimiteți un comentariu