next up previous contents index
suivant: Tableaux et passage par monter: main précédent: Tableaux de dimension 1   Table des matières   Index


Chaînes de caractères

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.


next up previous contents index
suivant: Tableaux et passage par monter: main précédent: Tableaux de dimension 1   Table des matières   Index
R Lalement