begin process at 2008 09 06 03:04:15
1 237 631 membres
31 nouveaux aujourd'hui
14 313 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : trouver un char dasn une string et le convertir... [ Archives / Divers ] (Spiffou)

trouver un char dasn une string et le convertir... le 03/02/2005 20:43:17

Spiffou
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.

Re : trouver un char dasn une string et le convertir... le 03/02/2005 21:15:12

bayeto
Membre Club
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;
}


Re : trouver un char dasn une string et le convertir... le 03/02/2005 23:09:44

anarchysniper
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 ?

Re : trouver un char dasn une string et le convertir... le 03/02/2005 23:11:31

Spiffou
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.
^^

Re : trouver un char dasn une string et le convertir... le 03/02/2005 23:18:10

anarchysniper
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.

Re : trouver un char dasn une string et le convertir... le 04/02/2005 14:00:10

Atmaweapon
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é'


Re : trouver un char dasn une string et le convertir... le 05/02/2005 16:14:37

steve_clamage
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


Classé sous : buffer, string, char, vector, debut

Participer à cet échange

Pub



Appels d'offres

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS