Trouver un char dasn une string et le convertir...

Spiffou Messages postés 100 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 9 juin 2014 - 3 févr. 2005 à 20:43
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 - 5 févr. 2005 à 16:14
bonjour à tous,



je suis bloqué sur un problème de C++ avec les strings et les vectors.

j'ai un vector contenant des std::string, et je souhaiterais extraire
de ces strings un de leur caractere afin de le convertir en int.

en gros j'ai string s="mot 1";

et je veux arriver à la fin à int x avec x=1, sachant que ma string est contenue dans un vector.



voila ce que j'ai fait qui ne marche pas:

vector<string> strvect;

char * debut;

debut = (char*)malloc(50*sizeof (char));

char * buffer;

buffer = (char*)malloc(50*sizeof (char));



debut = strdup("mot1 mot2 mot3 mot4 mot5");



// remplissage du vector

buffer = strtok(debut, " ");

while (buffer != NULL)

{

strvect.push_back(buffer);

buffer = strtok(NULL, " ");

}



for (int i=0;i<5;i++)

{

cout<<strvect[i]<<endl;

}



// recuperation du numero de chaque mot

char c;

string s;

s = strvect.pop_back();

cout<<s;

strcpy(buffer , s.c_str());

c = s[3];

printf("xx->%c\n",c);





ps: je vois bien que s ne recoit pas la bonne valeur et declenche le crash mais je ne sais pas comment faire...

si quelqu'un peut m'aider ca serait bien sympa de sa part.



Merci d'avance à vous.

6 réponses

bayeto Messages postés 224 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 18 octobre 2010
3 févr. 2005 à 21:15
deux chose d'abord: inutile d'allouer de la mémoire pour debut et buffer. Par contre il faut libérer debut par un free puisque tu appelle strdup.

Je te propose cette boucle:


for(
int i=0;i<5;i++)
{
string &s = strvect[i];
int c = (int) s[3] - '0';
cout<< strvect[i] << " x=" << c
<< endl;
}
0
anarchysniper Messages postés 65 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 29 septembre 2005 1
3 févr. 2005 à 23:09
Bete question : pourquoi un vector ?



C'est tellement plus compliqué qu'un tableau !



Je n'ai jamais trouvé d'avantage à ce système ...



Il doit il y en avoir un mais il m'échappe !



Quelqu'un pourrait-il m'éclairer ?
0
Spiffou Messages postés 100 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 9 juin 2014 1
3 févr. 2005 à 23:11
avantage du vector empiler et depiler dynamiquement des elements c'est dejà pas mal non?

pour les autres j suis pas un pro du vector.

^^
0
anarchysniper Messages postés 65 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 29 septembre 2005 1
3 févr. 2005 à 23:18
Oui mais quelques procédures simple peuvent permettre à un tableau
d'imiter ce comportment, sans les ennuis d'allocation de mémoire
inhérents aux vecteurs.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Atmaweapon Messages postés 50 Date d'inscription dimanche 28 décembre 2003 Statut Membre Dernière intervention 11 avril 2006 1
4 févr. 2005 à 14:00
le truc, c'est que les "quelques procédures" sont déjà implémentées dans les vector ... autant ne pas réinventer la roue...



de plus, il doit exister des modèles permettant de spécifier une
'bonne' taille a chaque réallocation de maniere a trouver un compris
entre 'temps jusqu'a la prochaine réallocation' et 'espace mémoire
utilisé'
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
5 févr. 2005 à 16:14
il n'y a que des avantage à utiliser std::vector quand la taille n'est
pas connue (quand elle est il est naturellement plus performant
d'utiliser un tableau)



std::vector permet comme ca l'a été dit d'empiler/de dépiler les
éléments de facon tres optimisée et en garantissant un temps d'accés
constant (tableau dynamique en interne). Un deque permet en plus
d'empiler/de dépiler au début (double ended queue) mais avec un temps
d'accés légerement superieur et sans reserve de mémoire possible (peut
etre implementer avec une liste de tableaux).



string s = "mot 1";

istringstream iss( s, s.find(' ') );

int x;

iss >> x
0
Rejoignez-nous