mardi 5 juillet 2016

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".:D

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

Citation:

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. ;)
Images jointes


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/29sDaPr
via IFTTT

Aucun commentaire:

Enregistrer un commentaire