IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

problème d'extraction depuis char vers string


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 60
    Points : 41
    Points
    41
    Par défaut problème d'extraction depuis char vers string
    Bonjour à tous,

    Comment faire pour extraire des caractères d'un char et les convertir en string puis float ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    char nombre[6] = {'1', '2', '.', '5', 'z', 'a'};
     
    char tampon[4];
     
    for (int i = 0; i < 5; i++)
    {
    tampon[i] = nombre[i];
    }
     
    string nombreString = tampon;
    Déjà à ce niveau là, tampon recopie finalement l'intégralité de nombre ... et dépasse nettement les 4 cases de prévues !!


    Si quelqu'un sait comment résoudre ce petit problème, je le remercie d'avance.

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    Pour mettre 4 caractères dans une chaine il te faut un tableau de 5 char.
    Il ne faut pas oublier le caractère NULL en fin de chaîne.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Points : 410
    Points
    410
    Par défaut
    Bonjour,

    Il semble que tu aie quelque problème avec les types des objets.

    Tu demande :
    Citation Envoyé par a_lincoln54 Voir le message
    Comment faire pour extraire des caractères d'un char et les convertir en string puis float ?
    Et le programme que tu veux débuger est :
    Citation Envoyé par a_lincoln54 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char nombre[6] = {'1', '2', '.', '5', 'z', 'a'};
    char tampon[4];
    for (int i = 0; i < 5; i++)
    {
    tampon[i] = nombre[i];
    }
    Dans ton code, tu essaie de copier un tableau de caractère dans un autre tableau de caractère. nombre, aussi bien que tampon sont deux tableaux de caractère. Aucun des deux ne peut être qualifié de "string" et encore moins de "double".

    Il existe (au moins) deux sortes de "string" très utilisées :
    - les string C, qui ressemblent à des tableaux de caractère, mais qui sont terminées par le caractère '\0';
    - les string C++, qui sont des objets.

    Si tu comptes faire du C++, tu trouveras plein d'infos sur la seconde ici

    Courage.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 60
    Points : 41
    Points
    41
    Par défaut
    Avec la réponse de Lucien63, que je remercie, le code fonctionne une fois sur deux c'est à dire que suivant le reste du code, le string peut prendre en compte des caractères supplémentaires et l'opération :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    string nombreString = tampon;
    ne fonctione pas car quand bien même tampon est correct (et contient bien - strictement - les caractères souhaités), le transtypage a l'air de ne pas fonctionner puisque nombreString greffe des caractères indésirables en plus.

    Quand je dit "suivant le reste du code", j'entends par là que même si j'initialise un vecteur qui n'a rien à voir avec le code présenté au début, eh bien j'obtiens de la "friture" dans le string nombreString !!!... c'est vraiment aléatoire...

    Sinon, je n'ai jamais dit que tampon et nombre sont des strings !! Mon but est de les convertir en string et puis après en float.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 60
    Points : 41
    Points
    41
    Par défaut
    Typiquement, le code suivant donne de la friture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
     
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #include <string>
    //#include <conio.h>
    //#include <stdio.h>
    //#include <cstring.h>
    #include <iostream>
    #include <fstream>
    #include <vector>
    using namespace std;
    #include <conio.h>
    #pragma hdrstop
     
    //---------------------------------------------------------------------------
     
    #pragma argsused
    int main(int argc, char* argv[])
    {
     
    char pChaine[34] = {'(', '(', 'a', 'g', '+', 'c', 'd', 'x', 'q', 'q', 'd', ')', 'x', '(',
    					'b', 'v', '*', 'y', 'u', '-', 'l', 'm', ')', ')', '+', '(', 'x',
    					'x', '-', 'b', 'g', ')', ';'};
     
     
    	std::vector< char > pSeg;
     
     
    	int increment_max = 0;
    	int index_parent_beg = 1;
    	int index_parent_end = 13;
    	int i = 0;
     
    		for (int k = index_parent_beg; k <= index_parent_end; k++) // extraction d'un segment de char
    		{
    		pSeg.push_back(pChaine[k]);
    		}
     
    	for (int r = 0; r < pSeg.size(); r++)
    	{
    	cout << pSeg[r] << endl;      // pSeg contient un sous ensemble de pChaine
    	}
     
    	string tampon_1S = "";
    	char tampon_1[5];
    	string tampon_2S = "";
    	char tampon_2[5];
     
    	for (int i = 0; i < pSeg.size(); i++)
    	{
     
    			if (pSeg[i] == 'x')   // recherche du caracyère x dans pSeg
    			{
    				for (int g = 0; g < 5; g++)
    				{
    				tampon_1[g] = pSeg[g+i-5];   // enregistrement des caractère à gauche de x dans tampon_1
    				}
     
    				tampon_1[5] = ' ';	// cloture de la chaine
     
    				for (int g = 0; g < 5; g++)
    				{
    				tampon_2[g] = pSeg[g+i];	// enregistrement des caractère à droite de x dans tampon_1
    				}
     
    				tampon_2[5] = ' ';	// cloture de la chaine
    			}
     
    			tampon_1S = tampon_1;
    			tampon_2S = tampon_2;
     
     
    }
     
    cout << endl;
    cout << endl;
    cout << tampon_1S << endl;
     
    getch();
     
       return 0;
     
    	}
    Il y a peut être des incompatibilités entre les .h, je ne sais pas.

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    Avec la réponse de Lucien63 ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      char tampon_1[5];	
      char tampon_2[5];
    //....
      tampon_1[5] = ' ';
      tampon_2[5] = ' ';
    Je ne suis pas sûr que tu as bien interprété ma réponse.
    Il va falloir revoir competement les chaine de caractères du langage C ou ne pas les utiliser vu que tu es en C++.
    Les indices des tableaux vont de 0 à n-1.
    le caractère de fin de chaînes est le caractère NULL '\0'

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 60
    Points : 41
    Points
    41
    Par défaut
    Merci pour votre réponse. C'est une confusion stupide car j'étais persuadé que NULL signifiait ; j'ai vraiment honte... Dans le même temps, il est vrai que c'est l'une des premières fois que j'utilise le char (un peu plus habitué au string et AnsiString...).

    J'en profite pour vous demander ce que je pourrai faire en C++. Si ma pChaine - qui traine une ribambelle de caractères - est de type string plutôt que char, comment serait-il possible de concaténer un nombre indéterminé de caractère sans passer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pChaine[0] + pChaine[1] + ...
    . C'est un peu pour cela que j'avais utilisé les char puisque l'on peut "transtyper" en une seule fois une chaîne de caractère isolée et à priori de taille indéterminée. Peut-être est-il possible de réaliser la même chose en string mais là je ne connais pas.

    Merci d'avance pour votre réponse.

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    dao,
    Citation Envoyé par a_lincoln54 Voir le message
    Merci pour votre réponse. C'est une confusion stupide car j'étais persuadé que NULL signifiait ; j'ai vraiment honte... Dans le même temps, il est vrai que c'est l'une des premières fois que j'utilise le char (un peu plus habitué au string et AnsiString...).

    J'en profite pour vous demander ce que je pourrai faire en C++. Si ma pChaine - qui traine une ribambelle de caractères - est de type string plutôt que char, comment serait-il possible de concaténer un nombre indéterminé de caractère sans passer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pChaine[0] + pChaine[1] + ...
    . C'est un peu pour cela que j'avais utilisé les char puisque l'on peut "transtyper" en une seule fois une chaîne de caractère isolée et à priori de taille indéterminée. Peut-être est-il possible de réaliser la même chose en string mais là je ne connais pas.

    Merci d'avance pour votre réponse.
    Comme l'a écrit Lucien63, il vaut mieux que tu relises tes cours/docs/tutos sur les chaînes, chaîne C ou string du C++
    Si les cons volaient, il ferait nuit à midi.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 60
    Points : 41
    Points
    41
    Par défaut
    Je pense que je vais abandonner la manipulation de char car je n'ai que des problèmes de viol. d'accès, d'exceptions... quand je cherche à passer en string.


    Merci pour vos conseils.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème exportation heure depuis Excel vers Access
    Par AstroZelda dans le forum Général VBA
    Réponses: 0
    Dernier message: 10/06/2015, 15h13
  2. Problème envoi image depuis iPhone vers web service SOAP
    Par grivinia dans le forum Développement iOS
    Réponses: 1
    Dernier message: 06/05/2015, 14h25
  3. Problème de publication depuis excel vers un site MOSS
    Par sguedon dans le forum SharePoint
    Réponses: 7
    Dernier message: 17/04/2009, 16h59
  4. tableau de char vers string hexa
    Par andromeda dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 22/07/2007, 23h10
  5. Probléme de conversion char vers datetime
    Par locs dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 28/02/2007, 15h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo