Salut à tous ! J'ai fais des recherches pour apprendre à utiliser la class string, et je connais maintenant la plupart de ses fonctions et comment les utiliser. J'ai donc codé un petit pendu (très basique, pour m'entrainner), tout marche bien, à une exception près !
Pour récupérer un caractère d'une chaine "ch", on fait comme ceci :
ch[position du caractère], sachant que le 1er caractère est 0 (comme dans les tableaux).
Seulement, j'ai uen erreur bizarre en l'utilisant, dans un if... voyez plutot la portion de code qui ne fonctionne pas:
C'est la boucle principale du jeu qui demande une lettre et vérifie si elle est dans le mot :
do {
cout << "Entrez une lettre a deviner: " << flush;
cin >> lettre;
lettre = lettre.substr(0, 1); /* On ne garde que la 1ere lettre */
/* On parcourt le mot, et on vérifie si il n'y a pas une lettre égale */ for(int i = 0; i < mot.size(); i++ ) {
C'est normal
lettre est de type string (je suppose)
mot[i] est de type char donc forcément....
ce que tu peux faire c'est à la place de substr
c'est faire
char c = lettre[0];
Eh oh, ta variable string est un objet !
Tu ne peux pas y accéder comme si c'était un tableau de char car ça n'en est pas un !
Si tu veux faire cela, sache qu'il existe une méthode c_str() ou qqc comme ça dans la classe string qui permet d'obtenir un pointeur sur le tableau de char, pour traiter la variable comme un tableau de char en C
Les opérateurs +, +=, ==, !=, <, <=, >, >=, >>,<< et [] peuvent être utilisés.
string s;
s = 'B' + "on";
s += "jour" ;
La chaîne s contient maintenant "Bonjour".
char c = s[2];
La variable c de type caractère contient 'n'.
Il affecte à la variable c, de type char, s[2] et il dit que c'est le 3eme caractère de l'objet string, la chaine "bonjour", donc c'est le caractère "n" (normal).
Je pensais pouvoir m'en servir dans mon test d'égalité, mais visiblement ce n'est pas possible, pourtant il utilises bien les crochets sur son objet string, alors que s est l'objet pas le pointeur pointant cers le char[] utilisé par la class.
On a le droit d'accéder au n-ieme caractere d'une chaine via [], à condition que ce caractere existe deja (ou soit le suivant du dernier de la chaine).
string::c_str() renvoie un pointeur sur un tableau de caracteres constants, dont la durée de vie est limitée par les opérations sur la chaine.
Ton erreur a déja été montrée.
string::operator[] renvoie un caractere. Tu cherche à comparer un caractere et une chaine -> erreur.
Okay Mackila j'ai compris ! Pas possible de comparer un caractère et une chaine !
Au fait, ça ne m'était pas venu à l'esprit, car j'avai mis cette ligne :
ligne = ligne.substr(0, 1);
Donc pour moi, ligne était un caractère, mais au fait c'était tout de même une chaîne !
J'ai réussi à faire le test qui marche en utilisant les [] pour lettre aussi :
if( deja[i] == lettre[0]) /* deja = string des caracteres qu'on a deja trouvé
lettre = string du caractère a deviner
Et là ça marche !
Merci bien j'ai compris !
[C++] La class string
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
If you'd like to join us, read "How do we work at OpenClassrooms"! :)