L'objet string
Alors avant d'aller plus loin, sachez que je ne suis pas un pervers, string est le nom donné par le langage concernant l'objet "chaîne de caractères".
Pré-Requis
Chaînes de caractères en C
Les librairies en C
Les boucles
Qu'est-ce qu'un objet string ?
C'est une chaîne de caractères, ou une suite de caractères. Sa taille peut évoluer dynamiquement... Ce qui veut dire qu'on peut concaténer sans difficulté notre chaîne initiale.
Exemple:
Code:
string s; s += "bonjour"; cout << s << endl; /* affiche bonjour */
Pour l'utiliser dans un code C++, on fait appel à une librairie qui se nomme (je vous le donne en mille) string ! On va donc placer cette librairie en début de code C++.
Code:
#include <string>
Pour accéder aux éléments, il y a deux manières de faire:
- comme en langage C avec les crochets []
- à la C++ avec la méthode at
L'avantage de la méthode at sera d'avoir une exception si l'indice de la chaîne dépasse le nombre de caractères total de la chaîne, ce que ne pourra pas faire la méthode à la C avec les crochets.
Donc oui, préférez la méthode at, c'est plus safe...
Exemple:
Code:
#include <iostream> #include <string> using namespace std; int main(){ string s("bonjour"); cout << "la lettre à l'indice 2 est: " << s.at(2) << endl; /* la lettre à l'indice 2 est: n */ return 1; }
Nombre de caractères dans une chaîne de caractères
Pour connaître le nombre de caractères, on utilisera la méthode size() ou length() qui jouent absolument le même rôle. Personnellement je préfère length() pour être en ce qui me concerne plus sémantique et facilement lisible dans un code.
Exemple:
Code:
#include <iostream> #include <string> using namespace std; int main(){ string s("bonjour"); cout << "le nombre de caractères est: " << s.length() << endl; /* le nombre de caractères est: 7 */ return 1; }
Vous l'avez vu précédemment
Code:
string s("bonjour");
Code:
string s = "bonjour";
Code:
const char *s = "bonjour";
Imaginons que je veux créer pour un pendu une chaîne de caractères composé que de caractère '*' pour créer un mot secret de la taille du mot "bonjour"
En C c'est assez lourd,
Code:
#include <stdio.h> #include <string.h> int main(void){ const char *s = "bonjour"; size_t length = strlen(s); char res[length+1]; int i; for(i=0; s[i]!='\0'; i++) res[i] = '*'; res[i] = '\0'; puts(res); return 1; }
Code:
#include <iostream> #include <string> using namespace std; int main(){ string s("bonjour"); string res(s.length(), '*'); cout << res << endl; return 1; }
Dans la documentation, vous avez cette construction possible
Code:
string (size_t n, char c);
Remplacer un caractère
Pour remplacer un caractère dans une chaîne de caractères on va utiliser les crochets.
Code:
#include <iostream> #include <string> using namespace std; int main(){ string s("bonjour"); string res(s.length(), '*'); res[2] = 'a'; /* remplacement d'une * par la lettre a à l'indice 2 */ cout << res << endl; /* **a**** */ return 1; }
Imaginons que vous vouliez enregistrer toutes les lettres proposées par l'utilisateur dans un jeu du pendu, rien de plus simple, regardez !
Code:
#include <iostream> #include <string> #include <sstream> /* pour utiliser ostringstream */ using namespace std; int main(){ char letter; ostringstream s; while (1){ cin >> letter; /* demande lettre à l'utilisateur */ s << letter; /* enregistrement en mémoire dans s */ if (letter == 'p') break; /* Si lettre p, on sort de la boucle */ } cout << s.str() << endl; /* str est la méthode pour transformer en objet string */ return 1; }
Voilà, vous pourriez dans ce cours utiliser l'exercice du pendu pour vous familiariser avec cet objet, bien plus pratique dans son utilisation faut l'avouer que nos chaînes de caractères en C.