Annonce

Réduire
Aucune annonce.

C++ - cours n°2 -> L'objet string

Réduire
Ceci est une discussion importante.
X
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • C++ - cours n°2 -> L'objet string

    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 */
    L'opérateur += permet de concaténer (joindre, ajouter) un/des caractère(s) à notre chaîne initiale (qui dans notre exemple est vide).

    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>
    Accès aux éléments

    Pour accéder aux éléments, il y a deux manières de faire:
    1. comme en langage C avec les crochets []
    2. à 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;
    }
    Remarque: N'oubliez pas que l'indice commence à 0 comme en C.

    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;
    }
    Construire et initialiser une chaîne

    Vous l'avez vu précédemment

    Code:
    string s("bonjour");
    Je crée mon objet string nommé s et l'initialise avec ma chaîne de caractères "bonjour". Il y a plusieurs manières d'initialiser, mais préféré celle-ci, elle se démarque du C comme par exemple

    Code:
    string s = "bonjour";
    qui ressemble à ce qu'on faisant en C

    Code:
    const char *s = "bonjour";
    Mais là encore, ça sera un choix que vous ferez lorsque vous serez expérimenté...

    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;
    }
    Mais en C++

    Code:
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main(){
    
        string s("bonjour");
        string res(s.length(), '*');
    
        cout << res << endl;
    
        return 1;
    }
    c'est un jeu d'enfants, dans la construction d'une chaîne, on peut indiquer le nombre de caractères identiques à y placer.

    Dans la documentation, vous avez cette construction possible

    Code:
    string (size_t n, char c);
    Donc analyser bien cette page de documentation, plutôt que d'essayer de réinventer la roue

    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;
    }
    Formatage en mémoire

    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;
    }
    terminal.png

    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.
    Dernière modification par fred, 07 juillet 2016, 15h17.
Chargement...
X