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

  FORUM HardWare.fr
  Programmation
  C++

  probleme de classe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme de classe

n°870600
MsHome
djulsoonsoune
Posté le 11-10-2004 à 20:27:05  profilanswer
 

salut je suis au debut d'un projet de calculette et j'ai commencé ma classe en y implementant les additions , mais deja la ca ne marche pas , et je ne comprends pas :sweat:
 
voici mon code (je compile avec g++) :
 

Code :
  1. #include <cmath>
  2. #include <cstring>
  3. using namespace std;
  4. class calc
  5. {
  6. public:
  7. void newcalc(string nstr);
  8. float getresult();
  9. private:
  10. string::size_type lpos;
  11. float result;
  12. };
  13. void calc::newcalc(string nstr)
  14. {
  15. float cumulr=0;
  16. string ustr=nstr;
  17. while(1)
  18. {
  19. //
  20. if(calc::lpos = ustr.find(" + ",0))
  21. {
  22. break ;
  23. }
  24. //
  25. string::size_type ppos = ustr.find(" + ",0);
  26. calc::lpos = ppos;
  27. string nb = ustr.substr(ppos,3);
  28. ustr.erase(0,(ppos+2));
  29. char nbc[100] = nb.c_str();
  30. cumulr += atof(nbc);
  31. calc::result = cumulr;
  32. }
  33. }
  34. float calc::getresult()
  35. {
  36. float tres = calc::result;
  37. return tres;
  38. }


 
 
merci de votre aide :jap:


---------------
http://sylvainm.chez.tiscali.fr mon site qu'il est bieng
mood
Publicité
Posté le 11-10-2004 à 20:27:05  profilanswer
 

n°870601
masklinn
í dag viðrar vel til loftárása
Posté le 11-10-2004 à 20:27:44  profilanswer
 

l'indentation est en option chez toi?
 
pourquoi tu fais pas une méthode dédiée à l'addition? [:spamafote]
c'est quoi ce while(1) tout pourri?
[Taz]atof c'est mauvais, utilises les stringstreams[/Taz]


Message édité par masklinn le 11-10-2004 à 20:31:05

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°870604
Taz
bisounours-codeur
Posté le 11-10-2004 à 20:31:16  profilanswer
 

rhaa le getresult, c'est bof bof, ça te plairait pas de pouvoir faire des conversion (implicites si tu le veux) en float pat simple cast ?
 
 
newcalc -> écris un constructeur

n°870632
Lam's
Profil: bas.
Posté le 11-10-2004 à 20:48:24  profilanswer
 


Aille.  
c_str() te renvoie un const char *. C'est un pointeur vers une zone mémoire qui appartient à ta chaîne nb. Il est donc hors de question de faire ça:

Code :
  1. char nbc[100] = nb.c_str();


Surtout que stringstream existe...

n°870650
Taz
bisounours-codeur
Posté le 11-10-2004 à 20:57:25  profilanswer
 

sinon mshome, ton gros problème ça va être l'algorithme. Tu ferais bien de faire une version simple en  pré/post-fixé et gérer ça avec une pile. C'est un exercice très commun

n°870651
MsHome
djulsoonsoune
Posté le 11-10-2004 à 20:59:52  profilanswer
 

Lam's a écrit :

Aille.  
c_str() te renvoie un const char *. C'est un pointeur vers une zone mémoire qui appartient à ta chaîne nb. Il est donc hors de question de faire ça:

Code :
  1. char nbc[100] = nb.c_str();


Surtout que stringstream existe...


 
je remplace par quoi alors ?


---------------
http://sylvainm.chez.tiscali.fr mon site qu'il est bieng
n°870654
Taz
bisounours-codeur
Posté le 11-10-2004 à 21:00:50  profilanswer
 

par
 
#include <sstream>
 
istringstream is(nb);
nb >> f; // pareil qu'avec cin

n°870656
cris56
Posté le 11-10-2004 à 21:02:33  profilanswer
 

Lam's a écrit :

Aille.  
c_str() te renvoie un const char *. C'est un pointeur vers une zone mémoire qui appartient à ta chaîne nb. Il est donc hors de question de faire ça:

Code :
  1. char nbc[100] = nb.c_str();


Surtout que stringstream existe...


 
je sais que c'est mal en c++, mais quand je fais
 
char tab[100] = "hello";
 
j'initialise bien mon tableau avec un const char * ?

n°870659
Taz
bisounours-codeur
Posté le 11-10-2004 à 21:04:39  profilanswer
 

non, c'est un sucre synthaxique qui équivaut à { 'h', 'e', 'l', 'l', 'o', '\0' ... }

n°870661
cris56
Posté le 11-10-2004 à 21:06:00  profilanswer
 

oue, ok

mood
Publicité
Posté le 11-10-2004 à 21:06:00  profilanswer
 

n°870669
Lam's
Profil: bas.
Posté le 11-10-2004 à 21:13:07  profilanswer
 

Juste une vérification cris, on est bien d'accord que

Code :
  1. char titi[] = "hello";
  2. char toto[] = "hello";


 
n'a pas le même comportement que:

Code :
  1. const char * titi = "hello";
  2. const char * toto = "hello";


 
ok ?
 
Dans son cas, comme il n'utilise pas une valeur immédiate, il effectue une recopie inutile (et potentiellement dangereuse, vu qu'il ne prend pas en compte la taille de la chaîne avant d'allouer sa destination).

n°870672
cris56
Posté le 11-10-2004 à 21:15:51  profilanswer
 

oui
 
char titi[] = "hello"; // voila un tableau qui contient
 
'h', 'e', 'l', 'l', 'o', '\0' donc sizeof titi == 6
 
 
const char * titi = "hello"; // voila un pointeur qui contient l'adresse de la chaine litterale "hello" qui est un tableau constant
 
j'y suis?

n°870674
Lam's
Profil: bas.
Posté le 11-10-2004 à 21:17:52  profilanswer
 

Exactement. Et le point où je voulais en venir d'ailleurs, c'est que la plupart des compilos te permettent de n'allouer qu'une seule copie de "hello". Donc on aurait titi==toto dans cet exemple.

n°870675
Taz
bisounours-codeur
Posté le 11-10-2004 à 21:19:05  profilanswer
 

y en a même qui font du partage de sous-chaine

n°870678
cris56
Posté le 11-10-2004 à 21:20:23  profilanswer
 

ok merci !
 
en fait je l'avais plus ou moins remarquer en regardant le code généré

n°872323
MsHome
djulsoonsoune
Posté le 13-10-2004 à 13:37:55  profilanswer
 

Taz a écrit :

par
 
#include <sstream>
 
istringstream is(nb);
nb >> f; // pareil qu'avec cin


 
c'est quoi f ?
 
et comment s'utlise istringstream ?
 


---------------
http://sylvainm.chez.tiscali.fr mon site qu'il est bieng
n°872420
masklinn
í dag viðrar vel til loftárása
Posté le 13-10-2004 à 14:56:19  profilanswer
 

MsHome a écrit :

c'est quoi f ?
 
et comment s'utlise istringstream ?


RTFM [:itm]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°872553
MsHome
djulsoonsoune
Posté le 13-10-2004 à 17:47:08  profilanswer
 

les docs sont ecrites en etranger :o


---------------
http://sylvainm.chez.tiscali.fr mon site qu'il est bieng
n°872555
Taz
bisounours-codeur
Posté le 13-10-2004 à 17:48:54  profilanswer
 

MsHome a écrit :

les docs sont ecrites en etranger :o

va te pendre, je te file un exemple et t'en as rien secouer ...

n°872569
masklinn
í dag viðrar vel til loftárása
Posté le 13-10-2004 à 18:20:32  profilanswer
 

MsHome a écrit :

les docs sont ecrites en etranger :o


Arrête l'informatique [:freekill]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°874382
MsHome
djulsoonsoune
Posté le 15-10-2004 à 19:34:52  profilanswer
 

plz expliquez moi comment ca ca marche et je vous laisse tranquilles:
 
istringstream is(nb);
nb >> f;  
 
:jap: merci


Message édité par MsHome le 15-10-2004 à 19:35:04

---------------
http://sylvainm.chez.tiscali.fr mon site qu'il est bieng
n°874445
masklinn
í dag viðrar vel til loftárása
Posté le 15-10-2004 à 21:19:44  profilanswer
 

MsHome a écrit :

plz expliquez moi comment ca ca marche et je vous laisse tranquilles:
 
istringstream is(nb);
nb >> f;  
 
:jap: merci


Aaahhh, la magie de google
 [:atsuko]  
 
mais comme je suis sympa, je vais te donner le compte-rendu de la conversation entre moi et Taz sur les stringstreams
 

Citation :

Masklinn
Voila j'ai un hexa dans un string (oui, truc à la con), et je voudrais le convertir en quelque chose d'utilisable (genre un int)
 
j'ai trouvé StrToIntEx(LPCTSTR, STIF_SUPPORT_HEX, int *), mais... ma chaîne est en fait un basic_string<wchar_t>, donc au mieux je peux en extraire un wchar_t *... et j'arrive pas à trouver de fonction style StrToIntEx pour les wchar (les autres fonctions de conversion ne m'ont pas l'air de gérer les hexas, dis moi si je me trompe)
 
t'aurais pas une idée?
 
Edit, putain chuis trop con, je viens de voir que wcstol et wcstoul tu peux spécifier la base, j'avais pas remarqué avant [:totoz]


Citation :

Taz
 
non, j'ai pas windows.
utilise les wstringstream et on en parle plus


Citation :

Masklinn
 
oui mais ca m'aide pas à le convertir ca :)


Citation :

Taz
 
ben si ça t'aide si tu sais t'en servir


Citation :

Masklinn
 
la je dois t'avouer que j'ai beau regarder la doc des *stringstream je vois pas en quoi ca peut m'aider


Citation :

Taz
 
ben ça fait la meme chose que les *strto*


Citation :

Masklinn
 
la il va faloir m'expliquer (ou pas), parce que j'ai beau chercher je trouve pas comment on peut en sortir un int/long


Citation :

Taz
 
t'as déjà utiliser les stringstream ?


Citation :

Masklinn
 
ben non, sinon j'aurais su comment ils fonctionnaient et je n'aurais donc pas eu a te poser de question dessus :/


Citation :

Taz
 
bah documente toi, chez SGI par exemple ou cplusplus.com


Résultat?
je me suis mis dessus sérieusement, j'ai fini par comprendre comment ca marchait et maintenant je sais à peu près les utiliser.
Taz m'aurait donné la réponse, j'aurais fait mon truc et 2 jours plus tard je m'en serais plus souvenu [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°874449
WhatDe
Posté le 15-10-2004 à 21:24:44  profilanswer
 

Comme on dit: si un homme a faim, apprend lui à pêcher au lieu de lui donner un poisson [:whatde]

n°874659
MsHome
djulsoonsoune
Posté le 16-10-2004 à 09:44:16  profilanswer
 

j'ai vraiement pas le temps  de passer ma vie a lire une doc que je ne comprends pas (mon niveau d'anglais est faible je suis que en 1ere) , je programme ce truc pour le plaisir et j'ai juste besoin de ce truc une seule fois dans mon prog.  
 
Si tu sais pourquoi ne pas me dire en une ligne comment on utilise stringstream pour convertir une chaine en float ?  
 
:sweat:


Message édité par MsHome le 16-10-2004 à 09:46:15

---------------
http://sylvainm.chez.tiscali.fr mon site qu'il est bieng
n°874663
el muchach​o
Comfortably Numb
Posté le 16-10-2004 à 10:09:43  profilanswer
 

Si t'as pas le temps maintenant, je me demande bien quand est-ce que tu l'auras. Si tu t'orientes vers la prog C++, les stringstream, tu les verras plus d'une fois dans ta vie. Ca vaut donc le coup de faire l'effort. (et accessoirement, savoir lire/parler l'anglais aussi) (et franchement, une intro en français, ça doit pouvoir se trouver)


Message édité par el muchacho le 16-10-2004 à 10:11:58
n°874684
MsHome
djulsoonsoune
Posté le 16-10-2004 à 10:59:40  profilanswer
 

bon la j'en suis a ca :
 

Code :
  1. #include <cmath>
  2. #include <cstring>
  3. #include <iostream>
  4. #include <sstream>
  5. using namespace std;
  6. class calc
  7. {
  8. public:
  9. void newcalc(string nstr);
  10. float getresult();
  11. private:
  12. string::size_type lpos;
  13. float result;
  14. };
  15. void calc::newcalc(string nstr)
  16. {
  17. calc::result =0;
  18. float cumulr=0;
  19. string ustr=nstr;
  20. while(1)
  21. {
  22. //
  23. if(calc::lpos = ustr.find("+",0))
  24. {
  25. break;
  26. }
  27. //
  28. string::size_type ppos = ustr.find("+",0);
  29. calc::lpos = ppos;
  30. string nb = ustr.substr(ppos,1);
  31. ustr.erase(0,(ppos));
  32. stringstream nsstr;
  33. nsstr << nb;
  34. nsstr >> cumulr;
  35. calc::result = cumulr;
  36. }
  37. }
  38. float calc::getresult()
  39. {
  40. float tres = calc::result;
  41. return tres;
  42. }


 
 
ca compile sans erreurs mais getresult() retourne toujours 0 :sweat:


---------------
http://sylvainm.chez.tiscali.fr mon site qu'il est bieng
n°874713
Taz
bisounours-codeur
Posté le 16-10-2004 à 12:07:13  profilanswer
 

tu vas pas faire comme tout le monde et commencer par une classe Point :o

n°874720
burgergold
5$? va chez l'diable!
Posté le 16-10-2004 à 12:19:59  profilanswer
 

tiens j'ai justement un exo à faire avec des opérations comme ca. du genre (3 4 +) :D

n°874897
MsHome
djulsoonsoune
Posté le 16-10-2004 à 20:42:32  profilanswer
 

moi c'est plutot un truc comme les caculettes style ti 82 >
 
1+2*3/2-4  mais bon je galere deja avec les + :/


---------------
http://sylvainm.chez.tiscali.fr mon site qu'il est bieng
mood
Publicité
Posté le   profilanswer
 


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

  probleme de classe

 

Sujets relatifs
[Java] Problème de conception d'une classe GraphMapProblème avec la classe vector
Une classe qui me pose probleme[DLL] probleme export d'une classe en DLL
HTML/CSS>>Problème de classe[java] Probleme avec la classe Authenticator
[C++] problème avec une spécialisation de classe[java]Problème d'import de classe swing
Probleme d'importation de classepetit problème avec une classe PHP
Plus de sujets relatifs à : probleme de classe


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