Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 09/06/2017, à 13: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, à 14: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, à 22: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';

Hors ligne

#3 Le 10/06/2017, à 09: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 24.04

Hors ligne

#4 Le 10/06/2017, à 09: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, à 14: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, à 14: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, à 13: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, à 14: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