[C, C++] faire un array dynamique de strings...

faire un array dynamique de strings... [C, C++] - Programmation

Marsh Posté le 29-11-2002 à 16:48:00    

euh vala, moi j'utilise la class vector de vector.h pour mes array dynamique, mais quand je ve faire un truc du genre:
 vector<char[50]> string; il me pond un troll.... Par example quand je ve redimensionner l'array, il ve fait une erreur de compilation... et c'est po bo, snif
 
J'ai fait un truc moi meme qui marche mais c trés laid :
 

Code :
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <vector.h>
  4. struct string
  5. {
  6.     char *str;
  7. };
  8. void main()
  9. {
  10.     vector<string> a;
  11.     a.resize(10);
  12.     int i;
  13.    
  14.     for (i = 0; i<10; i++)
  15.     {
  16.     a[i].str = new char[50];//je doit faire ca pour chaque element de l'array, au secours !
  17.     itoa(i, a[i].str, 10);// pour verfier si l'array dynamique marche
  18.     strcat(a[i].str, " long long string...." );//pour verifier que je pe mettre plein de characteres...
  19.     cout<<a[i].str<<endl;
  20.     }
  21.     system("PAUSE" );
  22. }


 
Ben vala, j'avais prevenu c'est trés moche... Il doit y avoir bien plus propre que ca pour faire ca que je veux, a moins qu'il y ai une class faite exprés pour ca, a moins que j'utilise les vector n'importe comment, ou qu'il y ai mieux que les vector...

Reply

Marsh Posté le 29-11-2002 à 16:48:00   

Reply

Marsh Posté le 29-11-2002 à 16:49:46    

Pourquoi ne pas utiliser les string de la STL ?

Reply

Marsh Posté le 29-11-2002 à 16:51:03    

ben justement moi etre ignorant, moi pas connaitre hihi... STL, c t'y quoi dont ??

Reply

Marsh Posté le 29-11-2002 à 16:58:09    

MrX a écrit a écrit :

ben justement moi etre ignorant, moi pas connaitre hihi... STL, c t'y quoi dont ??




 
Standard Template Library, vector en fait partie !
C'est la librairie standard du C++

Reply

Marsh Posté le 29-11-2002 à 16:59:04    

C'est une partie de la library standard du C++... d'ou tu sort ton vector d'ailleurs...
 
a ce propos #include<vector.h> ca marche ?
Ce devrait-etre <vector> sans le .h
 
de meme pour les string #include<string>
 
http://www.sgi.com/tech/stl/basic_string.html
 
sinon pour le vector evite le resize qui ajoute des elements ert prefere le reserve()...
 
sinon tu peux aussi faire des vector<char *>...

Reply

Marsh Posté le 29-11-2002 à 17:02:38    

aye j'ai lu un truc sur le stl, j'ai pigé ! (c rare par malheur...)
 
Merci pour le lien je vais m'y collé.
 
reserve connaissais po, y avait que resize dans mon tutorial
 
ben vala merci

Reply

Marsh Posté le 29-11-2002 à 17:05:45    

vector<char *> je vien d'essayer, ca marche trés bien, c mieux la string de chez STL ??

Reply

Marsh Posté le 29-11-2002 à 17:13:22    

avec le char *  
 

Code :
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <vector>
  4. using namespace std;
  5. void main()
  6. {
  7.    vector<char *> a;
  8.    a.reserve(10);
  9.    int i;
  10.    
  11.    for (i = 0; i<10; i++)
  12.    {
  13.    a.push_back(new char[50]);
  14.    itoa(i, a[i], 10);
  15.    strcat(a[i], " long long string" );
  16.    cout<<a[i]<<endl;
  17.    }
  18.    system("PAUSE" );
  19. }

 
 
avec la string
 

Code :
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <vector>
  4. #include <string>
  5. using namespace std;
  6. void main()
  7. {
  8.    vector<string> a;
  9.    a.reserve(10);
  10.    int i;
  11.    
  12.    for (i = 0; i<10; i++)
  13.    {
  14.    char tempo[50];
  15.    itoa(i, tempo, 10);
  16.    a.push_back(tempo)
  17.    a[i].append(" long long string" );
  18.    cout<<a[i]<<endl;
  19.    }
  20.    system("PAUSE" );
  21. }

 
 
 
 
 

Reply

Marsh Posté le 29-11-2002 à 18:53:57    

c assez semblable, je prefere le char * . Thx pour l'aide

Reply

Marsh Posté le 29-11-2002 à 20:28:40    

MrX a écrit a écrit :

je prefere le char *



 
NAN surtout pas !
 
il faut bruler les char *
 
habitue toi a programmer avec les string
 
- c'est beaucoup plus simple et de beaucoup
- c'est plus secure (pas de buffer overrun ou overflow)
- pas de fuite memoire car on doit pas gerer les malloc() et free()
- plus puissant : pleins de methods integrees utiles
- facilement convertissable avec la methode c_str()
- surement pleins d'autres avantages
 
le truc bien pourris en C c'est les char *
dire que Pascal qui a ete invente avant le C possede une classe string...
 
aouais au passage, y'a quelqu'un qui sait par quoi est remplace strtok() pour la classe string ?
parceque strtok ca sucks, y'a du static a l'interieur donc impossible de multithreader et puis ca fonctionne avec des char *, berk
 

Reply

Marsh Posté le 29-11-2002 à 20:28:40   

Reply

Marsh Posté le 29-11-2002 à 20:36:56    

j'ai encore dit une connerie comme d'hab... sans espoir... merci du conseil

Reply

Marsh Posté le 29-11-2002 à 20:57:02    

MrX a écrit a écrit :

j'ai encore dit une connerie comme d'hab... sans espoir... merci du conseil  



 
 
nan t'as fait comme la majorite des gens qui connaissent pas et donc qui subisent le mauvais design du C et donc du C++  
pour programmer proprement en C et en C++ il faut le vouloir, en Java par exemple c'est deja beaucoup plus facile
 
tout le monde a ete comme toi au depart et beaucoup le sont encore avec plusieurs annees d'experience parcequ'ils ne sont pas aware :)  
le pire c'est de voir qu'il y a de nombreux projects qui sont actuellement developpes en C++ avec des char *  
 
pourtant le nombre de bugs qui pourraient etre supprime en remplacant les char* par des string...


Message édité par tanguy le 29-11-2002 à 20:58:51
Reply

Marsh Posté le 29-11-2002 à 21:06:20    

En fait le problème vient du fait que le message est dans la rubrique "cobol" !
 
OK, je sors . . .


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 30-11-2002 à 17:02:21    

lol j'ai encore fait mon sujet a le vas vite alors j'ai pas fait gaffe et pis vala... au fait cobol c koi ??

Reply

Marsh Posté le 30-11-2002 à 17:56:05    

un truc laid..... (très difficile d'imaginer plus laid, même l'assembleur est plus naturel)

Reply

Marsh Posté le 30-11-2002 à 17:56:40    

oui je sais j'avais envie de troller (quoique....)

Reply

Marsh Posté le 30-11-2002 à 21:50:24    

[:sterezis]  ca c un troll  :D

Reply

Marsh Posté le 23-12-2002 à 19:38:35    

Qu'est-ce qu'il fout dans Cobol ce topic !?

Reply

Sujets relatifs:

Leave a Replay

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