Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
694 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  ANSI C++ Conversion int to string

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

ANSI C++ Conversion int to string

n°701361
ikarios
Posté le 16-04-2004 à 18:41:40  profilanswer
 

Salut!
 
Quelqu'un saurait comment convertir un int en string avec ANSI C++ vu que la fonction itoa() n'existe pas en ANSI?
 
En fait je voudrais générer n noms de variable du genre objet_i en faisant une boucle sur i
 
Merci!

mood
Publicité
Posté le 16-04-2004 à 18:41:40  profilanswer
 

n°701365
Taz
bisounours-codeur
Posté le 16-04-2004 à 18:44:50  profilanswer
 

Code :
  1. #include <sstream>
  2. std::ostringstream out;
  3. out << 42;
  4. std::cout << out.str() << '\n';


 
t'as fait du PHP toi (:pfff:)
fais un tableau


Message édité par Taz le 16-04-2004 à 18:45:08
n°701376
ikarios
Posté le 16-04-2004 à 18:55:04  profilanswer
 

C pas con avec les stream... Merci, jva essayer
 
c pas pour php, et c pas possible un tableau car je doit faire une animation sous gimp et mes variables sont des images devant s'appeler image_i
Merci!

n°701383
Taz
bisounours-codeur
Posté le 16-04-2004 à 19:00:40  profilanswer
 

bah change tes histoires de gimp et utilise un tableau. on a jamais vu des variable_i

n°1607247
casper78
Posté le 02-09-2007 à 15:36:06  profilanswer
 


Dans le même genre de choses, voici le problème
qui me résiste :
 
J'ai écrit une fonction permettant de transformer un int en un string  
(etant débutant, je sais que cette fonction est primitive)
 
 

Code :
  1. /**
  2. * Cette fonction permet de convertir
  3. * un entier en chaines de caractères. <br>
  4. */
  5. string IntegerUtils::toString(int p_nEntier) {
  6. // Variables locales
  7. char *tChar = new char[33];
  8. int nEntier = p_nEntier;
  9. // Test
  10. if (p_nEntier == 0)
  11.  return *(new string("0" )); // Renvoi "0" si l'entier esr nul
  12. // Boucle
  13. int nReste;
  14. int nCursor = 0;
  15. while (nEntier > 0) {
  16.  // Calcul du reste
  17.  nReste = nEntier % 10;
  18.  // Ajout du reste dans le tableau
  19.  switch (nReste) {
  20.   case 0:
  21.    *(tChar + nCursor) = '0';
  22.    break;
  23.   case 1:
  24.    *(tChar + nCursor) = '1';
  25.    break;
  26.   case 2:
  27.    *(tChar + nCursor) = '2';
  28.    break;
  29.   case 3:
  30.    *(tChar + nCursor) = '3';
  31.    break;
  32.   case 4:
  33.    *(tChar + nCursor) = '4';
  34.    break;
  35.   case 5:
  36.    *(tChar + nCursor) = '5';
  37.    break;
  38.   case 6:
  39.    *(tChar + nCursor) = '6';
  40.    break;
  41.   case 7:
  42.    *(tChar + nCursor) = '7';
  43.    break;
  44.   case 8:
  45.    *(tChar + nCursor) = '8';
  46.    break;
  47.   case 9:
  48.    *(tChar + nCursor) = '9';
  49.    break;
  50.  }
  51.  // Incrémentation
  52.  nCursor++;
  53.  nEntier = (nEntier - nReste) / 10;
  54. };
  55. // Renvoi et construction  
  56. char *tRes = new char[nCursor];
  57. for (int i = 0; i < nCursor; ++i) {
  58.  *(tRes + i) = *(tChar + (nCursor - i - 1));
  59. }
  60. // Retourne la chaine
  61. return *(new string(tRes));
  62. }


 
Pour la tester, j'ai créé une classe de test (en utilisant la librairie CPPUNIT)
avec la fonction suivante :
 

Code :
  1. /**
  2. * Cette méthode permet de tester la conversion
  3. * d'un entier vers une chaine de caractères; <br>
  4. */
  5. void IntegerUtilsTest::testToString() {
  6. // Variables :
  7. int nEntier = 17;
  8. string *strChaine;
  9. // 1er Tests
  10. strChaine = new string("17" );
  11. CPPUNIT_ASSERT_EQUAL(*strChaine, IntegerUtils::toString(nEntier));
  12. delete strChaine;
  13. // 2ième Test
  14. strChaine = new string("1234" );
  15. nEntier = 1234;
  16. CPPUNIT_ASSERT_EQUAL(*strChaine, IntegerUtils::toString(nEntier));
  17. }


 
Lorsque je lance les tests unitaires, j'obtiens le résultat suivant :
 

Code :
  1. $ ./prog_test.exe
  2. .....................F
  3. !!!FAILURES!!!
  4. Test Results:
  5. Run:  21   Failures: 1   Errors: 0
  6. 1) test: testToString (F) line: 40 src/test/basic/IntegerUtilsTest.cpp
  7. equality assertion failed
  8. - Expected: 17
  9. - Actual  : 17=


 
Et, donc, ma question est de savoir d'où vient ce satané signe égal   :??:  :??:  
 
Si quelqu'un peut m'aider, je lui en serai reconnaissant  :jap:  
 
merci d'avançe

n°1607249
Joel F
Real men use unique_ptr
Posté le 02-09-2007 à 15:49:12  profilanswer
 

ta fonction ne sert strictement à rien :o.
Tu as tout ce qui te faut avec les std::stringstream [:dawa]

 

sinon, 100€ que tu ne gére pas correctement ta mémoire et ton '\0' terminal.

 

Bordel, en plus bonjour M. JAVA qui fait du C++

 

return *(new string("0" ));
ca mérite le pal !

 

return string("0" ) ca suffit hein. Go Back to your Lessons boy ;)

Message cité 2 fois
Message édité par Joel F le 02-09-2007 à 15:50:28
n°1607251
casper78
Posté le 02-09-2007 à 15:58:33  profilanswer
 

Joel F a écrit :

ta fonction ne sert strictement à rien :o.  
Tu as tout ce qui te faut avec les std::stringstream [:dawa]
 
sinon, 100€ que tu ne gére pas correctement ta mémoire et ton '\0' terminal.
 
Bordel, en plus bonjour M. JAVA qui fait du C++
 
return *(new string("0" ));
ca mérite le pal !
 
return string("0" ) ca suffit hein. Go Back to your Lessons boy ;)


 
 
Merci Dr House  :jap:  
 
C'est vrai : je viens de JAVA : j'en suis désolé pour les puristes mais
cela m'a beaucoup appris, surtout sur la POO. En conséquence, je demande humblement
votre indulgence (et non le pal !!)
 
Par contre, et là je suis sérieux, si tu as une bonne documentation sur  
les bonnes pratiques en C++, je suis preneur  :jap:  
 
PS : J'espère que ta jambe ne te fait pas trop souffrir

n°1607268
KangOl
Profil : pointeur
Posté le 02-09-2007 à 17:14:37  profilanswer
 

c'est une blague [:mlc] ?

n°1607284
Taz
bisounours-codeur
Posté le 02-09-2007 à 18:08:07  profilanswer
 

casper78 a écrit :

les bonnes pratiques en C++, je suis preneur  :jap:  
 
PS : J'espère que ta jambe ne te fait pas trop souffrir


* arrêter d'enculer les mouches
* utiliser std::string
 
 
Ah oui, j'oubliais : apprendre le C++

n°1607287
Joel F
Real men use unique_ptr
Posté le 02-09-2007 à 18:20:20  profilanswer
 

casper78 a écrit :


C'est vrai : je viens de JAVA


C'ets comme les gens qui sortent de PHP, ils font des tableaux avec des trucs genre [iidentifiant_i[/i].
Les mecs de JAVA fotn des new partout :o
 

casper78 a écrit :


Par contre, et là je suis sérieux, si tu as une bonne documentation sur  
les bonnes pratiques en C++, je suis preneur  :jap:  


Le cours qui a fait de moi l'Homme que je susi : http://www.bruno-garcia.net/www/Cours/
Plus de bon cours (et pas le site de l'infame zero) : http://cpp.developpez.com/cours/cppavance/
Thinkign In C++ : http://bruce-eckel.developpez.com/livres/cpp/ticpp/
La STL (sans qui il ne faut jamais sortir sans :o) : http://cpp.developpez.com/cours/stl/
 

casper78 a écrit :


PS : J'espère que ta jambe ne te fait pas trop souffrir


Ca ira :o

mood
Publicité
Posté le 02-09-2007 à 18:20:20  profilanswer
 

n°1607289
casper78
Posté le 02-09-2007 à 18:27:07  profilanswer
 

Joel F a écrit :


C'ets comme les gens qui sortent de PHP, ils font des tableaux avec des trucs genre [iidentifiant_i[/i].
Les mecs de JAVA fotn des new partout :o
 


 

Joel F a écrit :


Le cours qui a fait de moi l'Homme que je susi : http://www.bruno-garcia.net/www/Cours/
Plus de bon cours (et pas le site de l'infame zero) : http://cpp.developpez.com/cours/cppavance/
Thinkign In C++ : http://bruce-eckel.developpez.com/livres/cpp/ticpp/
La STL (sans qui il ne faut jamais sortir sans :o) : http://cpp.developpez.com/cours/stl/
 


 


 
 
Cher Joel F
 
Merci pour ton aide et effectivement c'était une mauvaise gestion
de la mémoire.
 
Donc, je vais aller potasser ces précieux documents.
 
Je profite, du temps de parole qu'il m'est donné, pour rassurer
Taz et KangOl : je promets de ne plus faire subir aux mouches, mes
appetits sexuels dépravés  ;)  
 

n°1613439
dinaiz
Posté le 20-09-2007 à 14:05:46  profilanswer
 

Joel F a écrit :

ta fonction ne sert strictement à rien :o.  
Tu as tout ce qui te faut avec les std::stringstream [:dawa]
 
sinon, 100€ que tu ne gére pas correctement ta mémoire et ton '\0' terminal.
 
Bordel, en plus bonjour M. JAVA qui fait du C++
 
return *(new string("0" ));
ca mérite le pal !
 
return string("0" ) ca suffit hein. Go Back to your Lessons boy ;)


 
return string("0" ) -> ca aussi ca merite le pal !!! ;-)
 
Ta variable string("0" )  a un scope limite a celui de la fonction . Aussi des que tu fais le return, elle n'existe plus .  
 
Ce code risque de marcher tant que tu ne fais pas de choses trop compliquees, mais essaie de faire du multithread et je te garantis que ta fonction ne retournera pas la string "0".  
 
Dáilleurs avec Visual C++, tu vas avoir un warning du style : returning reference to local variable or temporary .
 

n°1613450
Taz
bisounours-codeur
Posté le 20-09-2007 à 14:17:36  profilanswer
 

fortune

n°1613488
Joel F
Real men use unique_ptr
Posté le 20-09-2007 à 15:41:28  profilanswer
 

dinaiz a écrit :


return string("0" ) -> ca aussi ca merite le pal !!! ;-)


 
Quand on ne sait pas , on se tait.
 

Code :
  1. string getZero()
  2. {
  3.   return string("0" );
  4. }
  5. string s = getZero();


 
cree un objet temporaire dans le scope de la fonction. En sortie, il est copié sur la pile (par appel du copy constructor)
et ensuite atterri dans s.
 
C != C++ hein :o
Apres ofc, si tu fait ca avec des classes sans copy semantic, faut pas venir chialer.
(et je ne ferais pas d'attaque basse sur le fait que ,lol, tu utilise VC comme référence :o)

n°1613492
IrmatDen
Posté le 20-09-2007 à 15:51:43  profilanswer
 

Nan, mais VC (au moins le 2005) n'a pas ce comportement hein :D
(au moins il faudrait tester et préciser l'environnement utiliser avant de sortir ça)

n°1613519
Taz
bisounours-codeur
Posté le 20-09-2007 à 16:33:42  profilanswer
 

Si il l'a. C'est le comportement du C++.

n°1613520
Joel F
Real men use unique_ptr
Posté le 20-09-2007 à 16:36:56  profilanswer
 

Taz a écrit :

Si il l'a. C'est le comportement du C++.


j'ai dit une bétise ?  [:absolutelykaveh]

n°1613521
IrmatDen
Posté le 20-09-2007 à 16:37:36  profilanswer
 

Tu le règles comment pour l'avoir ce warning dans ce cas? (J'ai justement en /W4, mais nada :/)

n°1613524
Taz
bisounours-codeur
Posté le 20-09-2007 à 16:43:37  profilanswer
 

Joel F a écrit :


j'ai dit une bétise ?  [:absolutelykaveh]


bah non, je répondais à l'histoire du "c'est pas comme ça dans VS"

n°1613525
Taz
bisounours-codeur
Posté le 20-09-2007 à 16:44:14  profilanswer
 

IrmatDen a écrit :

Tu le règles comment pour l'avoir ce warning dans ce cas? (J'ai justement en /W4, mais nada :/)


Peut-être le fait qu'il n'y ait pas de warning signifie en fait qu'il n'y a pas de warning.

n°1613529
IrmatDen
Posté le 20-09-2007 à 16:55:45  profilanswer
 

Euh, dans ce cas, y'a quiproquo, je répondais à Dinaiz et Joel F qui glisse une attaque discrète sur VC :)
Edit: pour clarifier complètement, y'a pas de warning avec VS2005 donc.


Message édité par IrmatDen le 20-09-2007 à 16:56:23
n°1613530
Taz
bisounours-codeur
Posté le 20-09-2007 à 17:00:22  profilanswer
 

surprenant !

n°1644233
Flodelarab
Posté le 16-11-2007 à 19:52:49  profilanswer
 

Taz a écrit :

* arrêter d'enculer les mouches
* utiliser std::string


 :??: C'est quoi l'idée ? Tu crois qu'en mettant std::string(100) il va te sortir une string avec "100" ?  
T'es un comique.
 
Pauvre garçon.
 
 
Et puis, pour peu qu'elle soient un peu velues, c'est du bonheur!
 
 :hello:

n°1644248
Joel F
Real men use unique_ptr
Posté le 16-11-2007 à 20:55:39  profilanswer
 

toi, tu ferais mieux d'avaler ta langue et d'apprendre à lire :o
oh et en même temps, regarder les dates de topics c'est pas mal :o

n°1644249
IrmatDen
Posté le 16-11-2007 à 20:55:44  profilanswer
 

Non, pas string(100) bien sûr... Tu utilises un istringstream en le liant à un string et tu as une méthode plus simple, plus lisible et plus robuste que son while, son switch etc...
Tu fais pas pareil quand même?  [:petrus dei]

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  ANSI C++ Conversion int to string

 

Sujets relatifs
Conversion simple de String[résolu ] Conversion UTF-8 => OEM
[C++] conversion double en int ?Color -> int -> String "héxadécimale"
conversion d'un *char en flottant dans un tableauconversion des scancodes
conversion string -> char *Comment transformer un Array en String
Plus de sujets relatifs à : ANSI C++ Conversion int to string


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR