Structures de données IFT-10541 Abder Alikacem La classe string Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.

Slides:



Advertisements
Présentations similaires
Introduction au Langage C,C++
Advertisements

Formation universitaire à .NET: Introduction à C#
Cours n° 7 Standard Template Library II.
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Cours n° 8 Conception et Programmation à Objets
(Classes prédéfinies – API Java)
8. Les tableaux P. Costamagna – ISEN N1.
Algorithme et programmation
Regrouper des éléments de même type et pouvoir y accéder à laide dun identificateur et dun indice. Objectif des tableaux.
Structures de données linéaires
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Programme de baccalauréat en informatique Algorithmique et programmation IFT-1001 Thierry EUDE Hatem Mahbouli Laboratoire #12 Département dinformatique.
Outils de Programmation
Python La programmation objet
Structures de données IFT-2000
Leçon 2 : Surcharge des opérateurs IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Bases de la programmation en C++ 1 Les enchaînementsdinstruction Séquentiels. Exécutions dinstructions les unes à la suite des autres. Instructions séparées.
Structures de données IFT Abder Alikacem La classe vector Édition Septembre 2009 Département dinformatique et de génie logiciel.
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Structures de données IFT-2000
Structures de données IFT Abder Alikacem Espace de nommage Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Espace de nommage Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 5 : La surcharge des opérateurs Département dinformatique.
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Standard Template library Édition Septembre 2009 Département dinformatique et de génie logiciel.
Structures de données IFT Abder Alikacem Gestion des exceptions Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
Une nouvelle structure de données : les tableaux
Principes de programmation (suite)
IFT 6800 Atelier en Technologies d’information
COURS DE PROGRAMMATION ORIENTEE OBJET :
Standard Template Library
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Structures de données IFT-2000
IFT Structures de données Abder Alikacem Département dinformatique et de génie logiciel.
Structures de données IFT-10541
Structures de données IFT-2000 Abder Alikacem La récursivité Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT Abder Alikacem Gestion des exceptions Module 2 Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT Abder Alikacem Linéarisation des matrices Département dinformatique et de génie logiciel Édition septembre 2009.
Tableaux Introduction aux tableaux à une dimension. Déclaration, stockage, initialisation et accès en lecture ou en écriture aux composantes d’un tableau.
Structures de données IFT-2000
Structures de données IFT-10541
Structures de données IFT-2000
Structures de données IFT-2000
Structures de données IFT Abder Alikacem Semaine 2 Tests sur les pointeurs Département d’informatique et de génie logiciel Édition Janvier 2009.
Faculté Polytechnique de Mons
L’essentiel du langage C
Le langage C Structures de données
Programmation en Java Tableaux NGUYEN Thi Minh Tuyen
La notion de type revisitée en POO
JavaScript.
8PRO107 Éléments de programmation Les chaînes de caractères.
7ième Classe (Mardi, 24 novembre) CSI2572. Devoir 3 ?
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Strings et Tableaux en Java
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Les surcharges d'opérateurs
Cours LCS N°4 Présenté par Mr: LALLALI
Conception de Programmes - IUT de Paris - 1ère année – Cours 8 – Les entrées/sorties Comment fonctionnent les opérateurs > pour les types élémentaires.
1 Les caractères En informatique, les caractères sont très importants puisqu’ils sont utilisés pour la communication personne-machine. Puisque les ordinateurs.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
PRO-1027 Programmation Scientifique en C
1 Listes des méthodes de la classe string, et exemples.
Structures de données IFT-2000 Abder Alikacem Laboratoire #1 Département d’informatique et de génie logiciel Édition Septembre 2009.
Philippe Gandy - 8 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Objets et Actions Élémentaires.
Conception de Programmes - IUT de Paris - 1ère année Les classes Introduction Déclaration d’une classe Utilisation d’une classe Définition des.
Transcription de la présentation:

Structures de données IFT Abder Alikacem La classe string Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique et de génie logiciel

Plan Introduction Déclaration istream::operator>> avec string La classe string et les opérateurs relationnels Accès aux caractères et concaténation de chaînes Les méthodes de la classe string Exemple dutilisation des strings

La classe string Comme dans le cas des tableaux, le type natif (built-in) fourni par le langage pour la représentation des chaînes de caractères (cest-à-dire un tableau de taille fixe, avec le caractère \0 comme marqueur de fin de chaîne) nest pas toujours très pratique. La librairie standard de C++ met donc à disposition du programmeur un nouveau type (en réalité une classe) dénommé string, permettant une représentation efficace des chaînes, et offrant une large panoplie de fonctions nécessaires à la manipulation et au travail avec de telles chaînes: concaténation de chaînes, ajout/retrait dun ou plusieurs caractères, recherche de sous-chaînes, substitution de sous-chaînes,... Pour pouvoir utiliser des string dans un programme, il faut importer les prototypes et définitions contenus dans la librairie au moyen de la directive dinclusion:#include

La classe string Comme pour tout les autres types, les variables correspondant à des chaînes de caractères string doivent être déclarées; la syntaxe est: string «identificateur»; Exemple #include... string chaine; Les variables déclarées suivant la syntaxe indiquée ci-dessus sont automatiquement initialisées à une valeur correspondant à la chaîne vide.

La classe string La syntaxe dune déclaration avec initialisation est: string «identificateur»(«valeur»); où valeur est: soit une chaîne de caractères de la forme "..." soit une variable, constante ou référence de type string Exemple string str("une chaîne"); string chaine(str); La valeur littérale à utiliser pour une initialisation explicite à une chaîne vide est: «""».

La classe string Toute variable de type string peut être modifiée par affectation: «identificateur» = «valeur»; où valeur est: soit un caractère (par exemple: «i») soit une chaîne de la forme «"..."» soit une référence à une autre entité de type string Exemple string chaine; // chaine vaut « » const string chaine2("test"); // chaine2 vaut «test» chaine = c; // chaine vaut «c» chaine = string("str-temporaire"); // chaine vaut «str-temporaire» chaine = "built-in str"; // chaine vaut «built-in str» chaine = chaine2; // chaine vaut «test» Dans le cas de laffectation par un caractère, la valeur affectée à la chaîne est une chaîne de caractère réduite à ce caractère.

La classe string istream::operator>> avec string Possible : opérateur friend défini dans son interface. La string se restaure à partir d'une istream d'une façon plus contraignante, la fin de la string est : un espace, un tabulateur, une fin de ligne. En mode interactif, rarement approprié et si l'utilisateur met des espaces...!

La classe string istream::operator>> avec string #include using namespace std; int main() { cout << "Entrez une chaine [. pour quitter]: "; string str; cin >> str; while (str != ".") { if (cin) { cout << "La chaine de caractères est : " << str << endl; } // Pour consommer ce qui reste dans la stream cin.ignore(100, '\n'); cout << "Entrez une chaine [. pour quitter]: "; cin >> str; } return 0; }

La classe string istream::operator>> avec string Résultat: Entrez une chaîne [. pour quitter] : surnom La chaîne de caractères est : surnom Entrez une chaîne [. pour quitter] : un surnom La chaîne de caractères est : un Entrez une chaîne [. pour quitter] :

La classe string Les opérateurs relationnels suivant sont définis pour les chaînes de type string: OpérateurOpération >= strictement inférieur inférieur ou égal strictement supérieur supérieur ou égal La relation dordre utilisée pour ces opérateurs est lordre alphabétique. (plus exactement, ordre lexicographique) == != égalité différence (non-égalité) Lordre alphabétique nest pas respecté dans le cas des caractères accentués, et les majuscules sont considérées comme précédant les minuscules.

La classe string Accès aux caractères Comme dans le cas des tableaux, il est possible daccéder individuellement à chaque caractère constitutif dune chaîne: Si str est une chaîne de type string, lexpression str[i] fait référence au (i+1)ème caractère de str. Chacun des éléments str[i] dune chaîne str de type string est de type char. Toujours comme dans le cas des tableaux, les éléments dune chaîne sont indicés de 0 à (taille - 1), où taille est la longueur de la chaîne (cest-à-dire son nombre de caractères).

La classe string Concaténation de chaînes La concaténation de chaînes de type string est réalisée par lopérateur « + ». Lexpression « chaine1 + chaine2 » correspond donc à une nouvelle chaîne, dont la valeur littérale est constituée par la concaténation des valeurs littérales de chaine1 et de chaine2. Les combinaisons suivantes sont possibles: string + string, string + char, string + "...", char + string, "..." + string,

La classe string Parmi les fonctions (méthodes) disponibles, on trouve: Prédicats int size() int length() Toutes deux renvoient la longueur de la chaîne (i.e. le nombre de caractères). Une manière usuelle pour parcourir un à un les caractères dune chaîne est donc litération for suivante: for (int i(0); i<str.size(); ++i) { // traitements avec «str[i]» } «str» désignera la variable de type string bool empty(): indique si la chaîne est vide (ou non). On a léquivalence suivante: «str.empty()» «(str.size() == 0)»

La classe string Méthodes de string : insertions string& insert(int pos, const char[] s) string& insert(int pos, const string& s) Insère, à partir de la position indiçée par pos, la chaîne s, et renvoie une référence à la chaîne modifiée. Exemple«string("1234").insert(2,"-xx-")» utilise le premier des prototypes spécifiés ci-dessus, et renvoie une référence à la chaîne de type string et de valeur «12-xx-34».

La classe string Méthodes de string : insertions string& insert(int pos, const char[] s, int len) string& insert(int pos, const string& s, int start=0, int len=npos) Insère, à partir de la position indiçée par pos, une sous-chaîne de s débutant à la position start (ou 0 dans le cas du premier prototype), et de longueur len. Une référence à la chaîne modifiée est retournée. Exemple: «string("1234").insert(2,string("#$%-!"),3,1)» utilise le Second prototype, et renvoie une référence à la chaîne de type string et de valeur «12-34». Remarques Une constante particulière, batisée «string::npos» permet en effet de représenter la notion «jusquà la fin de la chaîne». Remarquons que grâce à la convertion automatique (casting) des chaînes de forme «"..."» vers le type string, la commande peut également sécrire: «string("1234").insert(2,"#$%-!",3,1)».

La classe string Méthodes de string : remplacements string& replace(int pos, int long, const char[] s) string& replace(int pos, int long, const string& s) Substitue s au long caractères de la chaîne, à partir de la position indiçée par pos. Renvoie une référence à la chaîne modifiée. Exemple: «cout << string("1234").replace(2,1,"-trois-")» produira comme résultat laffichage de la chaîne «12-trois-4» : les caractères de lintervalle [pos, pos+long-1], soit le caractère [2,2], sont remplacés par la chaîne s.

La classe string Méthodes de string : remplacements string& replace(int pos, int long, const char[] s, int len) string& replace(int pos, int long const string& s, int start, int len) Substitue la sous-chaîne de long caractères et débutant à la position pos, par la sous-chaîne de s de len caractères et débutant à la position start (ou 0 dans le cas du premier prototype). Une référence à la chaîne modifiée est retournée. Exemple: «cout << string("1234").replace(2,1,"-trois-",1,5)» produira comme résultat laffichage de la chaîne «12trois4» : les caractères de lintervalle [pos, pos+long-1], soit le caractère [2,2], sont remplacés par la sous-chaîne de s [start, start+len-1].

La classe string Méthodes de string : recherches int find(char s, int pos = 0) int find(const char[] s, int pos = 0) int find(const string& s, int pos = 0) Retourne lindice du premier caractère de loccurrence de s la plus à gauche dans la chaîne, éventuellement privée de ses pos premiers éléments (la recherche débute à partir de la position pos). Renvoie «string::npos» dans le cas où aucune occurrence nest trouvée. Exemple: «string("baabbaabbaab").find("ba",2)» renverra 4

La classe string Méthodes de string : recherches int rfind(char s, int pos = npos) int rfind(const char[] s, int pos = npos) int rfind(const string& s, int pos = npos) Retourne lindice du premier caractère de loccurrence de s la plus à droite dans la chaîne, éventuellement privée de ses (taille-pos) derniers éléments (la recherche débute à partir de la position pos). Renvoie «string::npos» dans le cas où aucune occurrence nest trouvée. Exemple: «string("baabbaabbaab").rfind("ba")» renverra 8

La classe string Fonctionnement de find et rfind La méthode «find» effectue une recherche du début vers la fin, en prenant comme début la position éventuellement spécifiée comme position de départ. Ainsi, «str.find(s, pos)» consiste à faire une recherche de s dans str, privée de ses pos premiers éléments. La méthode «rfind» effectue une recherche de la fin vers le début, en Prenant comme fin la position éventuellement spécifiée comme position de départ. Ainsi, «str.rfind(s, pos)» consiste à faire une recherche «arrière» de s dans la sous-chaîne préfixe de str et de longueur pos + 1.

La classe string string s; s="Le langage "; string t="C"; cout<<s<<t; // Affiche: Le langage C t="C++"; // t est redimensionné automatiquement t.replace(1,2,"obol"); // Les 2 caractères à partir de la position 1 // sont remplacés par "obol" cout<<s<<t; // Affiche: Le langage Cobol string u=t.substr(0,1) // extrait 1 caractère // à partir de la position 0 cout<<s<<u; // Affiche: Le langage C Autres méthodes de string

La classe string Exemple dutilisation des strings On désire réaliser une extension automatique des abbréviations dans un texte: On utilise pour cela une table de correspondance entre les abréviations (acronymes) et leur signification: AcronymeSignification CFFChemin de Fer Fédéraux c-à-dcest-à-dire...

La classe string Exemple dutilisation des strings #include // Définition des composants de la table associative typedef vector Strings; // Table associative, globale (externe) Strings acronymes; Strings significations; // Fonction de remplacement: // utilise les variables externes définissant les acronymes, // mais uniquement en lecture (pas deffet de bord). void expliciteAcronymes(string& str) { int debutAbbrev; for (int i(0); i<acronymes.size(); ++i) while ((debutAbbrev=str.find(acronymes[i])) != string::npos) str.replace(debutAbbrev,acronymes[i].size(),significations[i]); }...