Vous êtes sur la page 1sur 9

Programmation C++ 07/09/2017

C-Strings et la classe string


Sommaire
Chapitre 12 – C Strings et la classe string
• C-Strings

Programmation C++ • Fonctions en librairie fonctionnant avec les C-Strings

• Conversions entre nombres et strings

• Ecrire ses propres fonctions pour gérer les C-Strings


Par
Siaka Fofana • La classe string de C++
fsiaka@hotmail.com • Creation de sa propre classe String
Laboratoire des Signaux et Systèmes

Copyright
Copyright ©© 2017
2014, Siaka
2008 Fofana,
Pearson Laboratoire
Education, des Signaux
Inc. Publishing et Systèmes.
as Pearson Université FHB Côte d’Ivoire
Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

C-Strings et la classe string C-Strings et la classe string


C-Strings C-Strings
Le caractère NULL
• C-string: séquence de caractères stockés en des • Le caractère null est utilisé pour indiquer la fin d’un
emplacements mémoires adjacents et terminée par le string
caractère NULL • Il peut être spécifié en tant que
• Le C-string – le caractère '\0'
"Bien chef!" – la valeur int 0
– la constante nommée NULL
sera stocké en mémoire comme montré ci-dessous:

B i e n c h e f ! \0

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

1
Programmation C++ 07/09/2017

C-Strings et la classe string C-Strings et la classe string


C-Strings C-Strings
Représentation des C-Strings Litéral string

En tant que litéral string • Un literal string est stocké comme un tableau de char
"Bien chef!" terminé par un caractère null
En tant que pointeur vers un char
char *p; • Le compilateur utilise l’adresse du premier caractère du
En tant que tableau de caractères tableau comme valeur du string
char str[20];
Toutes ces trois representation sont des pointeurs • Un litéral string est un pointeur vers un caractère (char)
vers un caractère

la valeur de "Bien" est


B i e n \0
l’adresse de ce tableau

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

C-Strings et la classe string C-Strings et la classe string


C-Strings C-Strings
Tableau de caractères (char) Tableau de caractères (char)
• Un tableau de char peut être déclaré et initialisé par un
C-string • Le nom d’un tableau de caractères (char) est utilisé
char str1[20] = "Bien"; comme pointeur ver un caractère (char)
• Un tableau de caractères peut être déclaré et après
recevoir un string en utilisant strcpy ou cin.getline • Contrairement à un litéral string, on peut faire référence
à un C-string déclaré comme un tableau dans une autre
char str2[20], str3[20];
partie du programme en utilisant le nom du tableau
strcpy(str2, "Bien");
cout << "Entrer votre nom: ";
cin.getline(str3, 20);

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

2
Programmation C++ 07/09/2017

C-Strings et la classe string C-Strings et la classe string


C-Strings C-Strings
Pointeur vers un char Pointeur vers un char

• Déclaré comme • Un pointeur vers un char peut aussi faire référence à un


char *pStr; C-strings déclaré comme un tableau de caractères (char)

char str[20] = "Bien";


• Ne peut pas lui même s’allouer de la mémoire char *pStr = Str;
cout <<pStr; // affiche Bien
• Pratique dans les références repetitives aux C-
strings déclarés comme des litéraux string • On peut allouer dynamiquement de la mémoire qui sera
utilisée pour un C-string en utilisant new
pStr = "Bien chef!";
cout << pStr << " "
<< pStr;

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

C-Strings et la classe string C-Strings et la classe string


Les C-Strings et la librairie C++ Les C-Strings et la librairie C++
Les fonctions utilisant les C-Strings

• Nécessite le fichier header cstring int strlen(char *str)

Retourne la longueur d’un a C-string:


• Les fonctions prennent un ou plusieurs arguments cout << strlen("bonjour");
C-strings. Un argument peut être: Affiche: 7
– un nom de tableau de caractères (char)
– un pointeur vers un caractère (char)
– un litéral string Remarque: Ceci est le nombre de caractères contenus
dans le string et NON la taille du tableau qui le contient

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

3
Programmation C++ 07/09/2017

C-Strings et la classe string C-Strings et la classe string


Les C-Strings et la librairie C++ Les C-Strings et la librairie C++
Les fonctions utilisant les C-Strings Les fonctions utilisant les C-Strings

strcat(char *dest, char *source) strcpy(char *dest, char *source)


• Prend deux C-strings comme entrée. Elle ajoute le
contenu du second string à la fin du premier string: • Copie un string d’une adresse source vers une adresse
char str1[15] = "Bien ";
destination
char str2[30] = "chef!"; char nom[15];
strcat(str1, str2); strcpy(nom, "Deborah");
cout << str1; // affiche: Bien chef! cout << nom; // affiche Deborah

• Pas de vérification automatique des bornes: le • Ici encore pas de verification automatique de bornes
programmeur doit s’assurer que le 1 er string a assez de
place pour contenir le résultat

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

C-Strings et la classe string C-Strings et la classe string


Les C-Strings et la librairie C++ Les C-Strings et la librairie C++
Les fonctions utilisant les C-Strings Les fonctions utilisant les C-Strings

int strcmp(char *str1, char *str2) int strcmp(char *str1, char *str2)

• Compare les strings stockés aux deux adresses pour • Souvent utilisée pour tester une égalité
if(strcmp(str1, str2) == 0)
déterminer leur ordre alphabétique relative. cout << "égalité";
else
cout << "inégalité";
• Retourne une valeur: • Utilisée aussi pour déterminer l’ordre des C-strings dans les applications
plus petite que 0 si str1 précède str2 de tri
égale à 0 si str1 est égal à str2 • Remarque:
– Les comparisons sont sensibles à la "case": "Bonjour" != "bonjour"
plus grande que 0 si str1 succède str2
– Les C-strings ne peuvent pas être comparés à l’aide == (qui compare les
adresses des C-strings et leurs contenus)
Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

4
Programmation C++ 07/09/2017

C-Strings et la classe string C-Strings et la classe string


Les C-Strings et la librairie C++ Conversions entre nombres et Strings
Les fonctions utilisant les C-Strings

int *strstr(char *str1, char *str2) • "1416" est un string; 1416 sans quotes est un int

• Recherche l’occurrence de str2 dans str1. • Il esiste des classes qui peuvent être utilisées pour les
conversions entre les strings et les formes numériques
• Retourne un pointeur sur l’occurrence de str2 dans des nombres
str1 si elle y trouve et retourne NULL sinon

• Nécessite d’inclure le fichier header sstream


char s[15] = "Abracadabra";
char *trouve = strstr(s,"dab");
cout << trouve; // afiche dabra

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

C-Strings et la classe string C-Strings et la classe string


Conversions entre nombres et Strings Conversions entre nombres et Strings
Les classes de conversion atoi et atoll
• istringstream:
– Contient un string à convertir en une valeur numérique • atoi convertit un alphanumerique en (to) un int
où nécessairement
– On utilise str(s) pour initialiser le contenu de s • atol convertit un alphanumerique en (to) un long
– On utilise l’opérateur d’extraction de stream extraction
operator >> pour lire à partir du string int atoi(char *numericStr)
long atol(char *numericStr)
• ostringstream:
– Collectionne un string dans laquelle la donnée
numérique est convertie si nécessaire • Exemples:
– On utilise l’opérateur d’insertion << pour ajouter la int nombre; long nombreL;
donnée au string nombre = atoi("57");
– On utilise str() pour récupérer le sting converti nombreL = atol("50000");

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

5
Programmation C++ 07/09/2017

C-Strings et la classe string C-Strings et la classe string


Conversions entre nombres et Strings Conversions entre nombres et Strings
atof atoi, atol, atof

• atof convertit un string numerique en nombre réel en


virgule flottante, en réalite un double • Si le C-string à convertir contient des un caractère
qui n’est pas un chiffre le résultat sera indéfini
double atof(char *numericStr)
– la fonction peut retourner un résultat d
conversion valide jusqu’au premier caractère qui
• Exemple: n’est pas un chiffre
double nombre;
– la fonction peut retourner 0
nombreD = atof("3.14159");
• Toutes ces fonctions nécessitent cstdlib

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

C-Strings et la classe string C-Strings et la classe string


Conversions entre nombres et Strings Tests sur les caractères
itoa
• itoa convertit un int en (to) en un string alphanumerique Nécessitent tous le fichier header cctype
• Permet à l’utilisateur de spécifier la base de la conversion
itoa(int num, char *numStr, int base)
FONCTION SIGNIFICATION
• Exemple: Pour convertir le nombre 1200 en un string isalpha true si arg. est une lettre, false sinon
hexadecimal true si arg. est une lettre ou un chiffre,
isalnum
char numStr[10]; false sinon
itoa (1200, numStr, 16);
isdigit true si arg. est un chiffre t 0-9, false sinon
true si arg. est lettre minuscule, false
islower
• La fonction n’effectue aucune verification sur les bornes du sinon
tableau numStr

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

6
Programmation C++ 07/09/2017

C-Strings et la classe string C-Strings et la classe string


Ecrire ses propres fonctions sur les C-Strings La classe string de C++

• La classe string offre plusieurs avantages au délà des C-


style strings:
Lors de l’écriture d’une fonction sur les C-Strings:
– on peut passer des tableaux ou des pointeurs su
un char – un grand nombre de fonctions membres
– on peut effectuer une vérification sur les bornes – des opérateurs surchargés pour simplifier les
pour s’assurer qu’il y a assez d’espace pour expressions
recevoir le résultat
– on peut anticiper sur les saisies non valides des • Nécessite l’inclusion du fichier header string
utilisateurs

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

C-Strings et la classe string C-Strings et la classe string


La classe string de C++ La classe string de C++
Les constructeurs de la classes string Les opérateurs surchargés de string
• Le constructeur par défaut string()
Opérateur Signification
• Le contructeur par copie string(string&) initialise
>> lit les strings délimités par des espace et
un objet string avec les valeurs d’un autre objet string les met dans un objet string
<< insère un objet string dans un flot (stream)
• Constructeur par conversion string(char *)
initialise un objet avec les valeurs d’un C-string affecte le string de sa droite à l’objet string
=
de sa gauche
• Plusieurs autres constructeurs += ajoute le string de sa droite à la fin du
contenu de l’objet string de sa gauche

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

7
Programmation C++ 07/09/2017

C-Strings et la classe string C-Strings et la classe string


La classe string de C++ La classe string de C++
Les opérateurs surchargés de string Les opérateurs surchargés de string

string mot1, phrase;


Opérateur Signification string mot2 = " Chien";
cin >> mot1; // l'utilisateur saisit
// "Mon"
+ retoune la concatenation de deux strings phrase = mot1 + mot2; // la phrase devient
// "Mon Chien"
[] fait référence à un caractère d’un string phrase += " mange";
en utilisant la notation des tableaux for (int i = 0; i < 15; i++)
cout << phrase[i]; // affiche
>, >=, <, les opérateurs relationnels pour la // "Mon Chien mange"
<=, ==, comparaison des strings. Retoune true
!= ou false

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

C-Strings et la classe string C-Strings et la classe string


La classe string de C++ La classe string de C++
Les fonctions membres de string Conversion vers un C-String
• data() et c_str() retourne tous les deux l’equivalent
Catégories:
C-string d’un objet string
– conversion vers les C-strings: c_str, data
– modification: append, assign, clear, copy,
erase, insert, replace, swap • Pratique lors de l’utilisation d’un objet string avec une
fonction qui s’attend à un C-string
– gestion des espaces: capacity, empty,
length, resize, size
– sous-strings: find, substr char salutation[20] = "Bonne ";
string str("fin de journée");
– comparaison: compare strcat(salutation, str.data());

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

8
Programmation C++ 07/09/2017

C-Strings et la classe string C-Strings et la classe string


La classe string de C++ La classe string de C++
Modification d’objet string Modification d’objet string
• str.append(string s) • str.insert(int pos, string s)
ajoute le contenu de s à la fin de str insère s à la position pos dans str

• Le constructeur par conversion de string permet à un • Le constructeur par conversion de string permet de
C-string d’être passé à la place de s passer un C-string à la place de s
string str("Bonne ");
string str("Bonne journée");
str.append("fin de journée");
str.insert(6, "fin de ");

• append est surchargé pour une question de flexibilité • insert est surchargé pour une question de flexibilité

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

C-Strings et la classe string


Création de sa propre classe String

• Une bonne manière de mettre les techniques de la POO


en pratique

• La classe alloue de la mémoire dynamique, ainsi dispose


constructeur par copie, d’un destructeur et d’un opérateur
d’affectation surchargé

• Les surcharges des opérateurs d’insertion et d’extraction


de flot (stream) et bien d’autres opérateurs

Copyright
Copyright©©2014,
2017 2008 Fofana, Education,
SiakaPearson LaboratoireInc.
desPublishing
Signaux etasSystèmes. Université FHB Côte d’Ivoire
Pearson Addison-Wesley

Vous aimerez peut-être aussi