devstory

Le Tutoriel de C/C++ string

View more Tutorials:

Site d'apprentissage des langues gratuit:
Suivez-nous sur notre fanpage pour recevoir des notifications chaque fois qu'il y a de nouveaux articles. Facebook

1- C-Style String

1.1- String

En C++, il existe deux types de chaînes (string), des chaînes de style C (C-style string) et des chaînes de style C++ (C++-Style string).
Les chaînes C-Style sont vraiment des tableaux, mais il existe des fonctions différentes qui sont utilisées pour les chaînes, comme l'ajout de chaînes, la recherche de la longueur des chaînes et aussi pour vérifier si les chaînes correspondent à l'expression régulière (regular expression).
La définition d'une chaîne serait tout ce qui contient plus d'un caractère enfilé ensemble. Par exemple, "this" est une chaîne. Cependant, les caractères uniques ne seront pas des chaînes, bien qu'ils puissent être utilisés comme des chaînes.
String sont des tableaux de lettres. Les chaînes littérales sont des mots entourés de guillemets doubles (string literals)

// Declare a C-Style String.
char mystring[] = { 't', 'h', 'i', 's', ' ', 'i', 's' ,' ', 't', 'e', 'x', 't', '\0'};

// This is a string literal.
char mystring[] = "this is text'';
StringLiteralExample.cpp

#include <stdio.h>

int main() {

   // Declare a String literal.
   char s1[] = "What is this";

   // Print out the string
   printf("Your string = %s", s1);

   fflush(stdout);

   return 0;
}
Résultats de l'exécution:
  • char mystr[] = "what is this";
La string ci-dessus a 12 caractères, pour déclarer cette string en C, vous devez déclarer un tableau de caractères avec 13 éléments, n'oubliez pas que le dernier élément dans le tableau est un caractère null (le code est '\ 0'), cela signifie que c'est la fin de string. Le dernier caractère ne signifie pas dans votre chaîne, mais il est nécessaire que les programmes C, tels que le pointeur (pointer) indique vers un emplacement de la chaîne, se tiennent au premier caractère et que vous souhaitez récupérer le contenu réel de string, le programme parcourera le L'élément suivant jusqu'à ce qu'il rencontre le caractère null.
Dans le cas où vous disposez d'un tableau de caractères et incluent un caractère null qui n'est pas à la fin du tableau, ou plus de caractères null dans le tableau. Mais C ne verra que ce tableau contient une string, y compris le premier caractère du premier caractère null dans le tableau.
L'exemple suivant déclare un tableau de caractères qui comporte 100 éléments utilisés pour stocker le text en tant qu'entrée utilisateur du clavier. Dans cette situation, les caractères de la chaîne d'entrée seront attribués aux premiers éléments du tableau et ensuite au caractère null. Et l'élément suivant ne peut pas être assigné
StringFromKeyboardExample.cpp

#include <stdio.h>

int main() {

   // Declare an array of characters with 100 elements,
   // used to store user input string from the keyboard.
   char s1[100];

   printf("Enter your string: \n");
   fflush(stdout);

   // scanf function wait user input from the keyboard.
   // (Press enter to end).
   // It will scan to get a string and assigned to the variable s1.
   // (%s: scan a string does not contain spaces)
   scanf("%s", s1);

   printf("Your string = %s", s1);

   fflush(stdout);

   return 0;
}
L'exécution de l'exemple:

1.2- Des fonctions pour C-style String

C fournit plusieurs fonctions pour fonctionner avec String. Il se trouve dans la bibliothèque standard <string.h>. Ci-dessous, je liste certaines fonctions communes de C relatives à string (pas toutes).
Certaines fonctions pour String.
Le nom de la fonctionDescription
size_t strlen(const char *str)Calcule la longueur de la chaîne str mais ne comprend pas le caractère nul de terminaison
char *strcpy(char *dest, const char *src)Copie la string  indiquée par src à dest. Ceci renvoie un pointeur vers la destination dest.
int strcmp(const char *str1, const char *str2)Compare la chaîne données par le paramètre str1 et str2.
Si la valeur de retour > 0 alors str1 > str2, sinon renvoie la valeur = 0 alors str1 identique à str2, sinon str1 <str2.
char *strcat(char *dest, const char *src)Ajoute la chaîne indiquée par src à la fin de la chaîne pointue par dest. Cette fonction renvoie un pointeur vers le résultat de la chaîne de dest.
char *strchr(const char *str, int c)Recherche la première occurrence du caractère c (un caractère non signé) dans la chaîne indiquée par l'argument str.
StringFunctionsExample.cpp

#include <stdio.h>

// Using string library.
#include <string.h>

int main() {

   // Declare a string literal.
   char s1[] = "This is ";

   // Declare a C-Style string
   // (With null character at the end).
   char s2[] = { 't', 'e', 'x', 't', '\0' };

   // Function: size_t strlen(const char *str)
   // strlen funtion return length of the string.
   // site_t: is unsigned integer data type.
   size_t len1 = strlen(s1);
   size_t len2 = strlen(s2);

   printf("Length of s1 = %d \n", len1);
   printf("Length of s2 = %d \n", len2);

   // Declare an array with 100 elements.
   char mystr[100];

   // Function: char *strcpy(char *dest, const char *src)
   // copy s1 to mystr.
   strcpy(mystr, s1);

   // Function: char *strcat(char *dest, const char *src)
   // Using strcat function to concatenate two strings
   strcat(mystr, s2);

   // Print out content of mystr.
   printf("Your string = %s", mystr);

   fflush(stdout);

   return 0;

}
L'exécution de l'exemple:

2- C++ Style String

C++ vous fournit la classe string,  qui vous aide à travailler plus facilement avec la chaîne. Les méthodes que la classe de string fournit toujours un support pour travailler avec la chaîne C-Style.

2.1- Déclarer la bibliothèque de string

Pour utiliser string, vous devez déclarer #include <string> les directives du préprocesseur (Preprocessor Directives) et déclarer l'utilisation de l'espace de noms std.

// Declare Preprocessor Directives

#include <string>

// Declare to use the namespace std.

using namespace std;
Déclarer une string:

// Declare a string object.

string mystring = "Hello World";

// If you do not declare using namespace std.
// You must use the full name:

std::string mystring = "Hello World";

2.2- Les méthodes de la String

Voici les méthodes de liste de​​​​​​​ String.

2.2.1- length()

length() est l'une des méthodes les plus courantes de String, elle renvoie la longueur de chaîne (nombre de caractères de la chaîne).
LengthDemo.cpp

#include <iostream>
using namespace std;

int main() {
    string str = "This is text";
    int len = str.length();

    cout << "String Length is : " << len << endl;
    return 0;
}
Résultats de l'exécution de l'exemple:

2.2.2- append

AppendDemo.cpp

#include <iostream>
using namespace std;

int main() {

      string s1 = "One";
      string s2 = "Two";
      string s3 = "Three";

      cout << "s1 = " + s1 << endl;
      cout << "s2 = " + s2 << endl;
      cout << "s3 = " + s3 << endl;
      cout << " ------------ " << endl;

      // Append s2 into s1.
      string s = s1.append(s2);


      cout << "s1 = " + s1 << endl; // ==> OneTwo
      cout << "s = " + s << endl;   // ==> OneTwo

      cout << " ------------ " << endl;

      // Append s2,s3 into s1.
      s = s1.append(s2).append(s3); // ==> OneTwoTwoThree

      cout << "s1.append(s2).append(s3) = " + s << endl;

}
Résultats de l'exécution de l'exemple:

2.2.3- find

find est une méthode pour trouver la position d'apparition d'une sous-chaîne dans la chaîne actuelle. Cette méthode renvoie la string::npos constante, si elle n'est pas trouvée.
FindDemo.cpp

#include <iostream>
using namespace std;

int main() {

    string str = "This is text";
    // Find index within this string of the first occurrence 'i'.
    // ==> 2
    string::size_type idx = str.find('i');

    cout << "- find('i') = " << idx << endl;

    // Find index within this string of the first occurrence 'i'
    // starting the search at index 4.
    // ==> 5
    idx = str.find('i', 4);
    cout << "- find('i',4) = " << idx << endl;

    // index within this string of the first occurrence of "te".
    // ==> 8
    idx = str.find("te");
    cout << "- find('te') = " << idx << endl;

}
Résultats de l'exécution de l'exemple:

2.2.4- substr

SubstrDemo.cpp

#include <iostream>
using namespace std;

int main() {

    string str = "This is text";

    // Returns the substring from index 3 to the end of string.
    string substr = str.substr(3);

    cout << "- str.substr(3)=" << substr << endl;

    // Returns the substring from index 2 to index 7.
    substr = str.substr(2, 7);

    cout << "- str.substr(2, 7) =" << substr << endl;

}
Résultats de l'exécution de l'exemple:

2.2.5- replace

Quelques méthodes relatives au remplacement.
ReplaceDemo.cpp

#include <iostream>
using namespace std;

int main() {

   string str = "This is text";

   // Replace the 4-character string starting at position 8
   // by "string".
   string s2 = str.replace(8, 4, "string");

   cout << "- str=" << str << endl; // This is string
   cout << "- s2=" << s2 << endl;   // This is string
   cout << " -------------- " << endl;

   // Reset str.
   str = "This is text";

   // Replace the 4-character string starting at index 8,
   // by a substring of another string, 6 characters starting at index 0.
   // ==> It is string
   string s3 = str.replace(8, 4, "string is important", 0, 6);

   cout << "- str=" << str << endl; // It is string
   cout << "- s3=" + s3 << endl;    // It is string
   cout << " -------------- " << endl;

}
Résultats de l'exécution de l'exemple:
Un exemple combinant les deux méthodes find & replace pour remplacer toutes les sous- chaines précises par la nouvelle chaine.
ReplaceAllDemo.cpp

#include <iostream>
using namespace std;

// A function to find and replace
string replaceAll(string subject, const string& search, const string& replace) {
   size_t pos = 0;
   // function find return string::npos if not found.
   while ((pos = subject.find(search, pos)) != string::npos) {
       subject.replace(pos, search.length(), replace);
       pos += replace.length();
   }
   return subject;
}

int main() {

   string str = "This is text";

   cout << "- str: " << str << endl;
   cout << " --------------------- " << endl;

   // Find "is" and replace by "???".
   string result = replaceAll(str,"is", "???");


   cout << "- result: " << result << endl;
   cout << "- str: " << str << endl;
}
L'exécution de l'exemple:

2.2.6- insert

InsertDemo.cpp

#include <iostream>
using namespace std;

int main() {

    string str = "This text";

    string s2 = str.insert(5, "is ");

    cout << "- str=" << str << endl; // This is text
    cout << "- s2=" << s2 << endl;   // This is text
    cout << " -------------- " << endl;

}
L'exécution de l'exemple:

2.2.7- upper/lower

Bien que dans la classe string ne vous donne pas une méthode pour convertir une chaîne en chaîne majuscule ou en minuscule, mais vous pouvez le faire avec d'autres bibliothèques en C++.
L'utilisation de la fonction transform de l'environnement du nom (namespace) std:
UpperLowerDemo1.cpp

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

int main() {

    string str = "This is text";

    cout << "- str= " << str << endl;

    cout << " ----------------"  << endl;

    // Convert to uppercase
    std::transform(str.begin(), str.end(),str.begin(), ::toupper);


    cout << "- str= " << str << endl;

    // Reset str
    str =  "This is text";

    cout << " -------------- " << endl;

    // Convert to lowercase.
    std::transform(str.begin(), str.end(),str.begin(), ::tolower);

    cout << "- str= " << str << endl;
}
L'exécution de l'exemple:

View more Tutorials: