Page principale | Pages associées

Les chaînes en C++

Cette partie va essayer de développer les chaînes, et comment les manipuler.

#include <iostream> #include <string>
Ce fichier contient ce qu'il faut pour manipuler les chaînes

using namespace std; // Une fonction permettant d'afficher une chaîne void afficher( const string& s ) { cout << '[' << s << ']' << endl; // Affichage de la chaîne entre crochets } // ----- PROGRAMME PRINCIPAL ----- int main() { const char* c_chaine = "ABCDABDCBDCDAABCCD";
le type d'une chaîne litérale est const char*

// L'initialisation des chaînes string cVide;
Une chaîne vide, constructeur par défaut

afficher( cVide ); string c1 = c_chaine;
Construction à partir d'une c-chaîne, peut s'écrire aussi : string c1( c_chaine );

afficher( c1 ); string c2( c_chaine, 5 );
Construction d'une chaîne, en ne prenant que les 5 premiers caractères

afficher( c2 ); string c3( c_chaine, 4, 2 );
Construction à partir du 4ième élément (en partant de 0 ) sur une longueur de 2

afficher( c3 ); // La chaîne est-elle vide ? cout << "cVide vide ? " << cVide.empty() << " c3 vide ? " << c3.empty() << endl;
empty() renvoi true si la chaîne est vide ( size() == 0 )

// Affichage de la taille d'une chaîne cout << "longueur : " << c1.size() << endl;
size() et length() sont des synonymes pour connaite la taille d'une chaîne

// Concaténation de chaînes string c4 = c2 + c3;
crée une chaîne c4 à partir de c2 et de c3

afficher( c4 ); // Remplacement dans une chaîne c4.replace( 2, 3, "EFGHI" );
remplace les 3 caractères à partir du 2ième (en partant de 0) par une chaîne de 4 caractères "EFGHI" Tout le travail de redimensionnement et de décalage est fait automatiquement

afficher( c4 ); // Extraction de chaîne string c5 = c4.substr( 4, 2 );
extrait 2 caractères à partir du 5ieme caractère

afficher( c5 ); // Recherche dans une chaine string::size_type found = c1.find( c5 );
find recherche la chaîne c5 dans c1. size_type est le type que retourne les méthodes find.

cout << "c5 trouvé dans c1 ? " << ( found != string::npos ) << endl;
string::npos est la valeur indiquant qu'on n'a rien trouvé

// Recherche de la chaîne ABD dans c1 found = c1.find( "ABD" ); cout << "\"ABD\" trouvé dans c1 ? " << ( found != string::npos ) << endl; }

Voilà, rapidement ce qu'on peut faire avec les chaînes. Il y a de nombreuses autres fonctions permettant de chercher dans une chaîne et de les manipuler. Une recherche sur internet permet de connaître les fonctions disponibles.

La suite...


Le source complet :
#include <iostream> #include <string> using namespace std; // Une fonction permettant d'afficher une chaîne void afficher( const string& s ) { cout << '[' << s << ']' << endl; // Affichage de la chaîne entre crochets } // ----- PROGRAMME PRINCIPAL ----- int main() { const char* c_chaine = "ABCDABDCBDCDAABCCD"; // L'initialisation des chaînes string cVide; afficher( cVide ); string c1 = c_chaine; afficher( c1 ); string c2( c_chaine, 5 ); afficher( c2 ); string c3( c_chaine, 4, 2 ); afficher( c3 ); // La chaîne est-elle vide ? cout << "cVide vide ? " << cVide.empty() << " c3 vide ? " << c3.empty() << endl; // Affichage de la taille d'une chaîne cout << "longueur : " << c1.size() << endl; // Concaténation de chaînes string c4 = c2 + c3; afficher( c4 ); // Remplacement dans une chaîne c4.replace( 2, 3, "EFGHI" ); afficher( c4 ); // Extraction de chaîne string c5 = c4.substr( 4, 2 ); afficher( c5 ); // Recherche dans une chaine string::size_type found = c1.find( c5 ); cout << "c5 trouvé dans c1 ? " << ( found != string::npos ) << endl; // Recherche de la chaîne ABD dans c1 found = c1.find( "ABD" ); cout << "\"ABD\" trouvé dans c1 ? " << ( found != string::npos ) << endl; }
00001 #include <iostream> 00002 #include <string> 00003 using namespace std; 00004 00005 // Une fonction permettant d'afficher une chaîne 00006 void afficher( const string& s ) 00007 { 00008 cout << '[' << s << ']' << endl; 00009 // Affichage de la chaîne entre crochets 00010 } 00011 00012 // ----- PROGRAMME PRINCIPAL ----- 00013 int main() 00014 { 00015 const char* c_chaine = "ABCDABDCBDCDAABCCD"; 00016 // L'initialisation des chaînes 00017 string cVide; 00018 afficher( cVide ); 00019 00020 string c1 = c_chaine; 00021 afficher( c1 ); 00022 00023 string c2( c_chaine, 5 ); 00024 afficher( c2 ); 00025 00026 string c3( c_chaine, 4, 2 ); 00027 afficher( c3 ); 00028 00029 // La chaîne est-elle vide ? 00030 cout << "cVide vide ? " << cVide.empty() 00031 << " c3 vide ? " << c3.empty() << endl; 00032 // Affichage de la taille d'une chaîne 00033 cout << "longueur : " << c1.size() << endl; 00034 // Concaténation de chaînes 00035 string c4 = c2 + c3; 00036 afficher( c4 ); 00037 00038 // Remplacement dans une chaîne 00039 c4.replace( 2, 3, "EFGHI" ); 00040 afficher( c4 ); 00041 00042 // Extraction de chaîne 00043 string c5 = c4.substr( 4, 2 ); 00044 afficher( c5 ); 00045 00046 // Recherche dans une chaine 00047 string::size_type found = c1.find( c5 ); 00048 cout << "c5 trouvé dans c1 ? " << ( found != string::npos ) << endl; 00049 // Recherche de la chaîne ABD dans c1 00050 found = c1.find( "ABD" ); 00051 cout << "\"ABD\" trouvé dans c1 ? " << ( found != string::npos ) << endl; 00052 }

Dernière modification : Sun Jul 4 20:19:13 2004