Chaînes en C et C++
Le C stocke le texte dans des tableaux de char terminés par un caractère '\0' invisible, tandis que le C++ l'enveloppe dans std::string, qui gère la mémoire pour vous.
Qu’est-ce que Chaînes en C et C++ ?
Le C stocke le texte dans des tableaux de char terminés par un caractère '\0' invisible, tandis que le C++ l'enveloppe dans std::string, qui gère la mémoire pour vous.
Comparez les tableaux de caractères du C et std::string du C++ : longueur, concaténation, comparaison et recherche.
Points importants
- Activez les avertissements du compilateur et corrigez-les.
- Connaissez le type et la durée de vie de chaque valeur.
- Validez les entrées et les limites des tableaux.
Exemples de code C et C++
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void) {
/* A C string is a char array that ends with '\0'. */
char name[32] = "Ada";
printf("%s has %zu letters\n", name, strlen(name));
/* strcat appends; the array must have room for the result. */
strcat(name, " Lovelace");
printf("%s\n", name);
/* strcmp returns 0 when two strings are equal. */
printf("equal: %d\n", strcmp("cat", "cat") == 0);
/* Walk the characters until the terminating '\0'. */
char upper[32];
size_t i = 0;
for (; name[i] != '\0'; i++) {
upper[i] = (char)toupper((unsigned char)name[i]);
}
upper[i] = '\0';
printf("%s\n", upper);
/* strstr finds a substring and returns a pointer to it, or NULL. */
printf("contains \"love\": %s\n", strstr("lovelace", "love") ? "yes" : "no");
return 0;
}
Ada has 3 letters
Ada Lovelace
equal: 1
ADA LOVELACE
contains "love": yes
#include <algorithm>
#include <cctype>
#include <iostream>
#include <string>
int main() {
// std::string manages its own memory and grows as needed.
std::string name = "Ada";
std::cout << name << " has " << name.size() << " letters\n";
name += " Lovelace";
std::cout << name << '\n';
// == compares the contents of two strings.
std::cout << "equal: " << (std::string("cat") == "cat") << '\n';
std::string upper = name;
std::transform(upper.begin(), upper.end(), upper.begin(),
[](unsigned char c) { return static_cast<char>(std::toupper(c)); });
std::cout << upper << '\n';
// find returns std::string::npos when the text is missing.
std::string word = "lovelace";
std::cout << "contains \"love\": " << (word.find("love") != std::string::npos ? "yes" : "no") << '\n';
std::cout << "first name: " << name.substr(0, 3) << '\n';
}
Ada has 3 letters
Ada Lovelace
equal: 1
ADA LOVELACE
contains "love": yes
first name: Ada
Comparaison entre C et C++
En C, strlen, strcat, strcmp et strstr travaillent sur des tableaux bruts, et c'est à vous de vérifier que le tableau est assez grand. std::string propose size(), +=, ==, find() et substr() et grandit tout seul, ce qui évite les débordements de tampon.
C expose de petites API procédurales et les détails de représentation.
C++ conserve le modèle bas niveau et ajoute des types et abstractions plus sûrs.
Exercices pratiques
Exécutez les deux versions puis modifiez-les pour observer leurs garanties.
- Ajoutez des entrées invalides et limites.
- Compilez avec -Wall -Wextra -Wpedantic.
- Séparez déclarations et implémentations.
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.
- Count Uppercase Letters Count the capital letters in a text. Facile
- Initials From a Name Build uppercase initials from a full name. Facile
- Replace Spaces With Dashes Turn spaces into dashes to make a URL-style slug. Facile