Exercices C/C++ pour débutants

Compter les voyelles d'une chaîne en C et C++

Dans cette leçon, vous allez compter les voyelles d'une ligne de texte en ignorant la différence entre majuscules et minuscules.

Introduction

Compter les voyelles réunit trois compétences : parcourir chaque caractère de la chaîne, passer les caractères en minuscules et vérifier si un caractère appartient à un ensemble. Les voyelles en anglais sont a, e, i, o et u.

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 <ctype.h>
#include <stdio.h>
#include <string.h>
int main(void) {
    const char *text = "Code Utility"; int count = 0;
    // strchr performs a compact membership check.
    for (; *text; ++text) if (strchr("aeiou", tolower((unsigned char)*text))) ++count;
    printf("vowels=%d\n", count);
}
Résultat de l’exécution
vowels=5
C++
Exécuter →
main.cpp
#include <algorithm>
#include <cctype>
#include <iostream>
#include <string>
int main() {
    std::string text = "Code Utility";
    // count_if counts characters accepted by the predicate.
    auto vowels = std::count_if(text.begin(), text.end(), [](unsigned char c) {
        return std::string("aeiou").find(std::tolower(c)) != std::string::npos;
    });
    std::cout << "vowels=" << vowels << '\n';
}
Résultat de l’exécution
vowels=5

Comparaison entre C et C++

La fonction tolower passe chaque caractère en minuscule pour que majuscules et minuscules soient traitées de la même façon. Le caractère est converti en unsigned char avant d'être passé à tolower, pour éviter les problèmes avec les caractères spéciaux. La fonction strchr("aeiou", ...) renvoie un pointeur non NULL si le caractère figure dans la chaîne des voyelles, le compteur augmente alors. La chaîne "Code Utility" contient 5 voyelles.

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