#1 Le 09/06/2017, à 12:03
- neokal
[RESOLU] Probléme d'opération sur les caractére d'une chaine en c++
Bonjour à tous,
j'ai un petit soucis vraiment bizard que je ne parviens pas à comprendre, j'imagine que je suis trop novice encore pour que cela me paraisse évident, le code est le suivant
string test="this is a test";
string sortie="";
int compteur = 0;
for (i=0;i<test.size();i++)
{
sortie[compteur]=test[i];
cout << test[i] << " = " << sortie[compteur] << endl;
compteur++;
}
sortie[compteur]='\0';
cout << test << endl;
cout << sortie << endl;
La commande suivant
cout << sortie << endl;
Ne me renvoie rien du tout, ce qui est curieux c'est que j'ai bien une structure
t = t
h = h
i = i
s = s
=
i = i
s = s
=
a = a
=
t = t
e = e
s = s
t = t
Donc pour moi la string sortie est correct et pourtant rien à l'affichage de la chaine dans sa totalité, j'avais plus l'habitude en c de déclarer les tableaux char et j'imagine que mon erreur viens d'une compréhension limité du c++.
Si quelqu'un veux bien m'éclairer
Dernière modification par neokal (Le 17/06/2017, à 13:44)
Celui qui se transforme en bête se délivre de la douleur d'être un homme...
Hors ligne
#2 Le 09/06/2017, à 21:51
- lann
Re : [RESOLU] Probléme d'opération sur les caractére d'une chaine en c++
Si tu enlève cette ligne, ça fait quoi ?
sortie[compteur]='\0';
<Modéré>
Hors ligne
#3 Le 10/06/2017, à 08:32
- ft
Re : [RESOLU] Probléme d'opération sur les caractére d'une chaine en c++
(Je n'ai pas trop compris le pourquoi de la variable compteur.)
En essayant de respecter l'esprit de ton programme, j'écrirais plutôt :
string test("this is a test"), sortie;
for (unsigned long int i=0; i<test.size(); i++)
{
sortie += test[i];
cout << test[i] << " = " << sortie[i] << endl;
}
cout << test << endl;
cout << sortie << endl;
Ubuntu 25.04
Hors ligne
#4 Le 10/06/2017, à 08:52
- grigouille
Re : [RESOLU] Probléme d'opération sur les caractére d'une chaine en c++
string test="this is a test";
string sortie=test;
cout << test << endl
<< sortie << endl;
Debian (xfce) 12
HP LaserJet M1132 MFP
Hors ligne
#5 Le 10/06/2017, à 13:45
- neokal
Re : [RESOLU] Probléme d'opération sur les caractére d'une chaine en c++
Bonjour et merci pour vos réponses.
Tout d'abord oui j'ai essayé sans la ligne
sortie[compteur]='\0';
Celle-ci étant inspiré directement du C.
Oui la commande
sortie=test;
cout << sortie << endl;
Affiche correctement la chaîne.
Merci bien à toi ft car la syntaxe
sortie += test[i];
Fonctionne pour moi à la perfection et offre le rendu espéré en supprimant une variable inutile (compteur). Je vais pouvoir continuer tranquillement. J'avoue être vraiment newbiz en ce qui concerne le c++ par rapport au c et je pense que la plupart de mes problèmes (dont très possiblement celui-ci) viennent de la.
Toutefois j'avoue ne pas trop comprendre ce 'fonctionnement' qui a priori pour moi me semblait logique.
Je laisse le post ouvert quelque temps 'au cas ou' pour des précisions. Encore merci.
Dernière modification par neokal (Le 10/06/2017, à 13:46)
Celui qui se transforme en bête se délivre de la douleur d'être un homme...
Hors ligne
#6 Le 11/06/2017, à 12:07
- no_spleen
Re : [RESOLU] Probléme d'opération sur les caractére d'une chaine en c++
Bonjour,
Le problème du code initial c'est que
string sortie="";
Crée un string "sortie" de taille zéro. C++ te permet néanmoins d'écrire au dela de la fin du string, avec la syntaxe
sortie[compteur]=test[i];
Mais cela n'augmenta pas la taille de "sortie" (tu peux t'en convaincre en placant un cout de la taille de sortie à l'intérieur de ta boucle, tu verras que la taille reste à zéro). Si tu continues comme cela pour un texte plus long, le programme finira par crasher. Cela peut surprendre, mais c'est à la fois la force et la faiblesse du C++. Tu es autorisé à écrire n'importe ou dans la mémoire, mais tu as interêt à savoir ce que tu fait.
La syntaxe
sortie += test[i];
Fonctionne car tu appelle l'opérateur += de la classe string. Cet opérateur augmente effectivement la taille du string et append le contenu de test à l'intérieur.
J'espère que c'était clair.
Bien à toi
Hors ligne
#7 Le 17/06/2017, à 13:44
- neokal
Re : [RESOLU] Probléme d'opération sur les caractére d'une chaine en c++
Réponse parfaitement claire,
Merci pour ces précisions je comprend parfaitement mon erreur maintenant )
Celui qui se transforme en bête se délivre de la douleur d'être un homme...
Hors ligne