des ptites questions sur la STL et sur string

des ptites questions sur la STL et sur string - C++ - Programmation

Marsh Posté le 13-12-2002 à 19:08:07    

hop deja premeire question ej comprends pas a koi sert <iostream> et "using namespace std;"
 
jai fait un ptit programme du type :
 

Code :
  1. #include <iostream.h>
  2. #include <string>
  3. void main() {
  4.   string s;
  5.   s = "coucou le monde";
  6.   cout << s;
  7. }


 
et ca marche tres bien
 
si vous pouviez me dire ce k'apporte exactement <iostream> par rapport a <iostream.h>, et a koi sert "using namespace std;" ?
 
2eme question maintenant:
 
y'a t'il moyen de construitre un objet string a partir d'un tableau de char (en fait je lis d'un fichier et j'aimerais mettre les lignes dans des string), ou alors y'a t'il moyen de lire les ligens d'un fichier directemetn dans une string ?
 
merci  :jap:

Reply

Marsh Posté le 13-12-2002 à 19:08:07   

Reply

Marsh Posté le 13-12-2002 à 19:51:31    

iostream fait partie du standard pas iostream.h
 
En particulier le comportement pour ce dernier
dependra de ton compilateur.
 
Sous visual C++ 6 si tu melanges
iostream.h avec string
alors tu ne peux pas ecrire  
cout << string("toto" );
 
Conclusion:  
si tu veux utiliser le standard C++ le plus recent, tu compiles avec iostream.
 
iostream.h n'a du sens que si tu as des sources qui datent et qui n'ont pas encore inclu le changement.
(parce qu'il y a eu plusieurs versions de la STL)
 
Maintenant a quoi servent les namespaces?
je pense que bien utilises ils peuvent aider le programmeur.
 
Tu peux choisir tous les noms que tu veux pour tes classes ou pour tes fonctions, il y a moins de risques que ce nom existe deja (meme si le risque n'est pas exclu mais par exemple ca risque de poser moins de problemes a l'edition des liens lorsque deux fonctions ont le meme prototype).  
 
tu as un namespace ig dans lequel sont redefinies quelques fonctions standards comme le malloc,
tu peux toujours l'appeler malloc parce que ig::malloc
ne collisionnera pas avec std::malloc
(c'est un exemple).
 
A+
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 13-12-2002 à 20:01:34    

Citation :

2eme question maintenant:
 
y'a t'il moyen de construitre un objet string a partir d'un tableau de char (en fait je lis d'un fichier et j'aimerais mettre les lignes dans des string), ou alors y'a t'il moyen de lire les ligens d'un fichier directemetn dans une string ?


 
c'est l'un des problemes que je rencontre parfois dans mon code.
Les litterals (inclus dans le segment data) n'existent que pour les tableaux de char. Ce qui fait qu'a chaque occurrence de la constante sous forme de string, il y a un surcout lie a la construction (a moins de le declarer static mais le surcout existe tout de meme a la creation de l'application ou lors du premier appel).
Ce serait bien d'avoir un stringwrapper, qui soit constructible dans le segment data et donc d'eviter d'avoir a dupliquer tout ca.. Pour ca les char * ont l'avantage. En pratique ce probleme est tres leger. Il faut juste faire attention a ne pas trop construire de constantes chaines sur la pile :(.
 
Pour ce qui est de ta question : Il y a un constructeur par defaut qui accepte un const char*
tu fais

Code :
  1. string machaine("contenu de ma chaine" );


tu peux aussi affecter un contenu apres coup:

Code :
  1. machaine = "un autre contenu";


 
pour lire depuis l'entree standard (avec iostream et pas iostream.h!!)

Code :
  1. getline(cin, machaine);


 
A+
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 13-12-2002 à 20:03:29    

ok emrci pour le coup de lire directeent dans un string plutot que dans un char * !

Reply

Marsh Posté le 13-12-2002 à 21:26:25    

bon je peux pas tester par manque de compilateur chez moi, mais est-ce que ceci pourrait marcher :

Code :
  1. #include <iostream.h>
  2. #include <fstream.h>
  3. #include <string>
  4. ifstream xml;
  5. xml.open("tennis.xml" );
  6. char buffer[256];
  7. string buf;
  8. xml.getline(buffer,256);
  9. buf = buffer; // <----- c'est a ce niveau la que j'ai un doute !

Reply

Marsh Posté le 13-12-2002 à 23:08:01    

Code :
  1. getline(xml, buf);


plutot.
Pas besoin de passer par un buffer intermediaire.
 
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 13-12-2002 à 23:09:12    

et encore une fois
 
<iostream> et non pas <iostream.h>
 
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 13-12-2002 à 23:12:50    

legreg a écrit :

et encore une fois
 
<iostream> et non pas <iostream.h>
 
LeGreg

pareil pour <fstream.h>


Message édité par Taz@PPC le 13-12-2002 à 23:13:38

---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 14-12-2002 à 02:22:21    

euh oui mais je tiens a utiliser les iostream.h et fstream.h, le code etant fait pour l'IUT on a certaines obligations
 
voila donc je voudrais savoir si le code donné plus haut marcherait sans modification par vous  :)  
 
sinon oui pour moi je me servirais de iostream et fstream

Reply

Marsh Posté le 14-12-2002 à 07:36:34    

Jam Kuradoberi a écrit :

euh oui mais je tiens a utiliser les iostream.h et fstream.h, le code etant fait pour l'IUT on a certaines obligations
 
voila donc je voudrais savoir si le code donné plus haut marcherait sans modification par vous  :)  
 
sinon oui pour moi je me servirais de iostream et fstream

ben normalement les versions sans .h et avec std:: doivent marcher quand meme, amoins que ton compilo ait 10ans


---------------
du bon usage de rand [C] / [C++]
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed