vector, array et pointers
Dernière réponse : dans Programmation
J'essaye de resoudre un probleme, mais je seche completement:
Je dois initialiser et remplir un vector de strings (ca, ca va). Ensuite, je dois copier le vector dans un array de *char. Pour chaque element du vector, je dois initialiser un nouvel char[] et copier les donnees de l'element du vector dans l'array. Ensuite, je dois inserer un pointeur vers cet array dans l'array de *char.
Je crois que j'ai correctement initialiser l'array de *char, mais je ne comprend pas comment initialiser un array[] pour chaque element du vector. Il y a t'il un moyen pour nommer sequentiellement des elements?
Je dois initialiser et remplir un vector de strings (ca, ca va). Ensuite, je dois copier le vector dans un array de *char. Pour chaque element du vector, je dois initialiser un nouvel char[] et copier les donnees de l'element du vector dans l'array. Ensuite, je dois inserer un pointeur vers cet array dans l'array de *char.
Je crois que j'ai correctement initialiser l'array de *char, mais je ne comprend pas comment initialiser un array[] pour chaque element du vector. Il y a t'il un moyen pour nommer sequentiellement des elements?
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main ()
{
string Tempword;
vector<string> Svec;
cout << "Type your text" << endl;
while (cin >> Tempword)
{
Svec.push_back(Tempword);
}
vector<string>::size_type Size_vec=Svec.size();
const size_t Main_array_size=Size_vec;
char *Main_array=new char [Main_array_size];
char *p=Main_array;
string Temp;
for (vector<string>::iterator i=Svec.begin(), iend=Svec.end(); i!=iend; ++i)
{
string Temp=*i;
const char *Temparray=Temp.c_str();
*p=*Temparray;
++p;
}
delete [] Main_array;
return 0;
}
Autres pages sur : vector array pointers
Lassé par la pub ? Créez un compte
Hum, c'est pas un TP ou un exo note, donc, je pense que c'est OK. J'essaie d'apprendre le C++ pour mon boulot. Je suis a la fin du chapitre sur les array/pointer/c-string et celui-la m'a rendu
J'arrive pas a comprendre comment le faire et comme je ne suis plus a l'ecole, je ne peux pas aller demander au prof. Bref, j'ai l'exo mais pas le corrige... (le bouquin est C++ primer 4th ed, de Lippman, Lajoie et Moo chez Addison Wesley, l'exo est page 141, section 4.32 , exercise 4.34 et 4.35).
Je pense comprendre le concept, mais je ne suis pas sur de savoir comment initialiser un "new" array de pointer, ni comment initialiser une serie de new array de character sequentiellement et encore moins comment combiner le tout.
Gros edit: J'ai trouve une solution (en chinois...) qui marche et qui repond exactement a la question:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main ()
{
string Tempword;
vector<string> Svec;
cout << "Type your text" << endl;
while (cin >> Tempword)
{
Svec.push_back(Tempword);
}
vector<string>::size_type Size_vec=Svec.size();
const size_t Main_array_size=Size_vec;
char **Main_array=new char *[Main_array_size];
string Temp;
int x=0;
for (vector<string>::iterator i=Svec.begin(), iend=Svec.end(); i!=iend; ++i, ++x)
{
string Temp=*i;
char *Temparray=new char[Temp.size()+1];
strcpy (Temparray, Temp.c_str());
Main_array[x]=Temparray;
}
for (vector<string>::iterator i=Svec.begin(), iend=Svec.end(); i!=iend; ++i)
{
cout << "Vector=" << *i << endl;
}
for (int x=0; x!=Svec.size(); ++x)
{
cout << "Array is:" << Main_array[x] << endl;
delete [] Main_array[x];
}
delete [] Main_array;
return 0;
}
Mais je ne suis pas sur de tout comprendre...
the only doudou a dit :
Vu la prise de tete que c'est, je doute que je persiste sur le sujet. Mais d'un autre cote, c'est utile de comprendre comment marche les choses. C'est pas franchement intuitif les *p, **p, etc.Un petit moyen mnémotechnique pour savoir s'il faut écrire *p, **p ou ... p :
char p;
// p est de type char
char *p;
// *p est de type char
// p est de type char*
char **p;
// **p est de type char
// *p est de type char*
// p est de type char**
Donc si tu écris une égalité et que tu n'es pas sûr si c'est *p ou **p que tu dois écrire, il te suffit de faire correspondre les types de chaque côté du signe "=".
Sinon petite remarque : lignes 21 et 26 25 tu déclares 2 fois la variable Temp
Lassé par la pub ? Créez un compte
Pour une fois que le gros chat gris se fait avoir ![[:nyghost] [:nyghost]](http://m.bestofmedia.com/sfp/design/usr/fr/smilies/2e/8f/nyghost.gif)