Exercices C/C++ pour débutants

Compter la fréquence des lettres d'une chaîne en C et C++

Dans cette leçon, vous allez compter combien de fois chaque lettre minuscule apparaît dans une chaîne à l'aide d'un tableau de 26 éléments.

Introduction

Une table de fréquences associe un compteur à chaque caractère. Comme il n'y a que 26 lettres minuscules de a à z, on peut utiliser un tableau de 26 éléments : l'élément 0 compte les a, l'élément 1 les b, et ainsi de suite.

Points importants

  • Activez les avertissements du compilateur (compiler warnings) et corrigez-les tous.
  • Comprenez bien le type et la durée de vie (lifetime) de chaque valeur.
  • Vérifiez toujours les données d'entrée et les limites des indices de tableau.

Exemples de code C et C++

C
Exécuter →
main.c
#include <stdio.h>
int main(void) {
    const char *text = "banana"; int counts[26] = {0};
    // Convert each lowercase letter to an array index.
    for (; *text; ++text) ++counts[*text - 'a'];
    for (int i = 0; i < 26; ++i) if (counts[i]) printf("%c=%d\n", 'a' + i, counts[i]);
}
Résultat de l’exécution
a=3
b=1
n=2
C++
Exécuter →
main.cpp
#include <array>
#include <iostream>
#include <string>
int main() {
    std::string text = "banana"; std::array<int, 26> counts{};
    // Convert each lowercase letter to an array index.
    for (char character : text) ++counts[character - 'a'];
    for (size_t i = 0; i < counts.size(); ++i) if (counts[i]) std::cout << char('a' + i) << '=' << counts[i] << '\n';
}
Résultat de l’exécution
a=3
b=1
n=2

Comparaison entre C et C++

L'expression *text - 'a' transforme une lettre en indice de 0 à 25, car les lettres ont des codes consécutifs. Le programme incrémente le compteur à cet indice, puis une seconde boucle n'affiche que les lettres dont le compteur n'est pas nul. Pour "banana", le résultat est a=3, b=1 et n=2.

C

C utilise de petites fonctions procédurales et montre ouvertement comment les données sont représentées en mémoire.

C++

C++ permet toujours de travailler à bas niveau, mais ajoute des types de bibliothèque et des abstractions plus sûres.

Exercices d'approfondissement

Exécutez les deux versions, puis modifiez le code pour observer la différence de sécurité qu'apporte chaque langage.

  • Testez des entrées invalides et des valeurs limites.
  • Compilez avec les options -Wall -Wextra -Wpedantic pour activer davantage d'avertissements.
  • Placez les déclarations communes dans un fichier d'en-tête et l'implémentation dans un fichier séparé.

S'entraîner avec un défi

Utilisez le contenu de cette leçon pour résoudre un vrai problème. Chaque défi s'exécute dans le navigateur, avec des tests instantanés et une revue par l'IA.

Tous les défis