Les chaînes de caractères (appelées en anglais strings), sont des objets importants en programmation, intervenant dans les entrées-sorties et plus généralement dans la manipulation de fichiers textuels.
Une chaîne littérale est une suite de caractères entourée par des apostrophes doubles " (en anglais double quotes), par exemple "Knuth" ; sa longueur est le nombre de caractères figurant entre les apostrophes, 5 pour "Knuth". La chaîne vide est "", de longueur zéro. L'opération la plus importante sur les chaînes est la concaténation de deux chaînes.
En C++, les chaînes sont représentés par des objets de type
string, lequel est déclaré dans <string>. Comme ce
type est une classe au sens de C++, les opérations sur ces chaînes
doivent être programmées dans le style à objets : on utilisera donc des
constructeurs d'objets et des méthodes, donc avec une
syntaxe différente de ce qu'on écrirait en C. Les objets de type
string peuvent être initialisés par des chaînes littérales et
copiés par affectation. La longueur d'une chaîne est obtenue en la
suffixant par .length(), la valeur obtenue étant un
unsigned int. Les chaînes sont concaténées à l'aide de
l'opérateur +. Les chaînes peuvent être lues sur l'entrée
standard cin et écrites sur la sortie standard cout au
moyen des opérateurs >>
et <<
. Voici un exemple :
#include <string> int main() { string d, k="Knuth", s; // définition de trois chaînes cout << d << endl; // (chaîne vide) cout << k.length() << endl; // 5 d = "Donald"; cout << d << endl; // Donald d = d + " " + k; cout << d << endl; // Donald Knuth cout << "Rentrez une chaîne : "; cin >> s; cout << s << endl; }
Les objets de type string sont assimilés à des tableaux de caractères, ce qui permet d'accéder à chaque caractère d'une chaîne, comme s'il s'agissait d'un tableau, pour le lire ou le modifier :
string k = "Knuth"; k[4] = 't'; unsigned int i; for (i=0; i<k.length(); i++) { cout << "k[" << i << "]=" << k[i] << endl; }
Les chaînes pouvant être des objets volumineux, on les passera toujours par référence aux fonctions ; de nombreuses fonctions ou méthodes déclarées dans <string> sont disponibles (extraction d'une sous-chaîne, recherche de sous-chaîne, remplacement, etc). Voici un exemple de ces méthodes :
string s1 = "une chaîne"; string s2 = s1.substr(4, 9); // s1 = "chaîne" string s3 = s1.replace(4, 9, "string"); // s2 = "une string" int n1 = s.find("ne"); // n1 = 1 int n2 = s.rfind("ne"); // n2 = 8
Signalons qu'en C, une chaîne de caractères est représentée en mémoire
comme un tableau de char dont le dernier élément est le
caractère nul noté \0
. Il existe des méthodes de conversion entre
le type string et les chaînes de C ; ces méthodes doivent être
utilisées notamment quand on dispose d'un type de chaînes qu'on doit
passer en argument à une fonction demandant l'autre type de chaînes.
Si cs est une chaîne de C, alors string(cs) est un
objet de type string ; inversement, si s est un
string, alors s.c_str() est une chaîne de C.