Chaînes C ++
C ++ fournit les deux types de représentations de chaîne suivants:
- La chaîne de caractères de style C.
- Le type de classe de chaîne introduit avec le C ++ standard.
La chaîne de caractères de style C
La chaîne de caractères de style C provient du langage C et continue d'être prise en charge dans C ++. Cette chaîne est en fait un tableau unidimensionnel de caractères qui se termine par unnullcaractère '\ 0'. Ainsi, une chaîne terminée par un nul contient les caractères qui composent la chaîne suivie d'unnull.
La déclaration et l'initialisation suivantes créent une chaîne composée du mot "Hello". Pour contenir le caractère nul à la fin du tableau, la taille du tableau de caractères contenant la chaîne est un de plus que le nombre de caractères du mot «Bonjour».
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
Si vous suivez la règle d'initialisation du tableau, vous pouvez écrire l'instruction ci-dessus comme suit -
char greeting[] = "Hello";
Voici la présentation de la mémoire de la chaîne définie ci-dessus en C / C ++ -
En fait, vous ne placez pas le caractère nul à la fin d'une constante de chaîne. Le compilateur C ++ place automatiquement le '\ 0' à la fin de la chaîne lorsqu'il initialise le tableau. Essayons d'imprimer la chaîne mentionnée ci-dessus -
#include <iostream>
using namespace std;
int main () {
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
cout << "Greeting message: ";
cout << greeting << endl;
return 0;
}
Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -
Greeting message: Hello
C ++ prend en charge un large éventail de fonctions qui manipulent des chaînes terminées par NULL -
Sr.Non | Fonction et objectif |
---|---|
1 | strcpy(s1, s2); Copie la chaîne s2 dans la chaîne s1. |
2 | strcat(s1, s2); Concatène la chaîne s2 à la fin de la chaîne s1. |
3 | strlen(s1); Renvoie la longueur de la chaîne s1. |
4 | strcmp(s1, s2); Renvoie 0 si s1 et s2 sont identiques; inférieur à 0 si s1 <s2; supérieur à 0 si s1> s2. |
5 | strchr(s1, ch); Renvoie un pointeur sur la première occurrence du caractère ch dans la chaîne s1. |
6 | strstr(s1, s2); Renvoie un pointeur vers la première occurrence de la chaîne s2 dans la chaîne s1. |
L'exemple suivant utilise quelques-unes des fonctions mentionnées ci-dessus -
#include <iostream>
#include <cstring>
using namespace std;
int main () {
char str1[10] = "Hello";
char str2[10] = "World";
char str3[10];
int len ;
// copy str1 into str3
strcpy( str3, str1);
cout << "strcpy( str3, str1) : " << str3 << endl;
// concatenates str1 and str2
strcat( str1, str2);
cout << "strcat( str1, str2): " << str1 << endl;
// total lenghth of str1 after concatenation
len = strlen(str1);
cout << "strlen(str1) : " << len << endl;
return 0;
}
Lorsque le code ci-dessus est compilé et exécuté, il produit un résultat comme suit -
strcpy( str3, str1) : Hello
strcat( str1, str2): HelloWorld
strlen(str1) : 10
La classe String en C ++
La bibliothèque C ++ standard fournit un stringtype de classe qui prend en charge toutes les opérations mentionnées ci-dessus, en plus beaucoup plus de fonctionnalités. Vérifions l'exemple suivant -
#include <iostream>
#include <string>
using namespace std;
int main () {
string str1 = "Hello";
string str2 = "World";
string str3;
int len ;
// copy str1 into str3
str3 = str1;
cout << "str3 : " << str3 << endl;
// concatenates str1 and str2
str3 = str1 + str2;
cout << "str1 + str2 : " << str3 << endl;
// total length of str3 after concatenation
len = str3.size();
cout << "str3.size() : " << len << endl;
return 0;
}
Lorsque le code ci-dessus est compilé et exécuté, il produit un résultat comme suit -
str3 : Hello
str1 + str2 : HelloWorld
str3.size() : 10