2 votes

Comment compter le nombre de fois qu'une lettre apparaît dans une chaîne alphabétique de lettres aléatoires

Je suis en train d'essayer de trouver le nombre de fois que chaque lettre de l'alphabet apparaît dans une chaîne aléatoire que l'utilisateur crée. J'ai tout le code, à l'exception de la partie qui compterait chaque fois qu'un caractère est trouvé. J'ai essayé d'utiliser quelques for...else boucles pour résoudre ce problème, mais peut-être que je ne sais simplement pas le faire correctement, je reçois soit des erreurs soit un espace vide sous le reste de la sortie.

Ce que je veux, c'est que la sortie ressemble à ceci :

A B C D E F G... 1 2 5 7 0 9 2...

Voici mon code et ma sortie jusqu'à présent : description de l'image ici description de l'image ici

#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <map>
using namespace std;

int main() {

int i=0, n;
char alphabet[26];
char c;
char RandomStringArray [100];
srand(time(0));

cout << "Combien de lettres voulez-vous dans votre chaîne aléatoire (pas moins de 0, pas plus de 100) : ";
cin >> n;

for (int i=0; i<=25; i++)
        alphabet[i] = 'a' + i;

while(i<n) {
    int temp = rand() % 26;
    RandomStringArray[i] = alphabet[temp];
    i++;
}

for(i=0; i<n; i++)
    cout<<RandomStringArray[i];
cout<<"\n\n";

/*for(c = 'A'; c <= 'Z'; ++c)
   cout<<" "< char_counts;
     for (int i = 0; i < n; ++i) ++char_counts[RandomStringArray[i]];{

for (char ch :: alphabet) std::cout << ch << ' ';{
     std::cout << '\n';
}
for (char ch :: alphabet) std::cout << char_counts[ch] <<'';{
        std::cout << '\n';
     }
      }
}

1voto

Cruz Jean Points 2591

std::unordered_map est bon pour ce genre de chose. C'est similaire à l'approche de tableau qui stocke les comptes pour chaque caractère mais c'est plus pratique à utiliser, surtout lorsque les plages de caractères qui vous intéressent ne sont pas contiguës.

Lorsque vous indexez un std::unordered_map, la valeur associée sera renvoyée par référence, il vous suffit donc de l'incrémenter. Si elle n'existe pas, elle est créée et initialisée par défaut (initialisée à zéro pour les types entiers).

Donc tout ce que vous avez à faire est:

std::unordered_map char_counts;
for (int i = 0; i < n; ++i) ++char_counts[RandomStringArray[i]];

Après cela, char_counts contient les comptes d'occurrence totaux de tous les caractères dans la chaîne. par exemple, char_counts['a'] est le nombre d'occurrences de 'a'.

Ensuite, pour les afficher tous, vous pourriez faire:

for (char ch : alphabet) std::cout << ch << ' ';
std::cout << '\n';

for (char ch : alphabet) std::cout << char_counts[ch] << ' ';
std::cout << '\n';

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X