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

Signaler
Messages postés
100
Date d'inscription
jeudi 1 avril 2004
Statut
Membre
Dernière intervention
9 juin 2014
-
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
-
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

Messages postés
224
Date d'inscription
mardi 12 août 2003
Statut
Membre
Dernière intervention
18 octobre 2010

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;
}
Messages postés
65
Date d'inscription
jeudi 28 août 2003
Statut
Membre
Dernière intervention
29 septembre 2005
1
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 ?
Messages postés
100
Date d'inscription
jeudi 1 avril 2004
Statut
Membre
Dernière intervention
9 juin 2014
1
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.

^^
Messages postés
65
Date d'inscription
jeudi 28 août 2003
Statut
Membre
Dernière intervention
29 septembre 2005
1
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.
Messages postés
50
Date d'inscription
dimanche 28 décembre 2003
Statut
Membre
Dernière intervention
11 avril 2006
1
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é'
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
3
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