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

Visual C++ Discussion :

Problème classe perso chaine de caractères


Sujet :

Visual C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut Problème classe perso chaine de caractères
    Bonjour,

    J'ai une classe CChaine qui ressemble à ça :

    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
    CChaine::CChaine(double nombre, const CChaine& format)
    {
    	short int pos = format.cherche("%");
     
    	CChaine taille;
     
    	_chaine = new char*;
     
    	if (pos != -1)
    	{
    		for (unsigned short int i = pos + 1 ;
    				i < (unsigned short int)format.getLongueur() && format(i, 1).estEntier() ; i++)
    		{
    			if (format(i, 1).estEntier())
    			{
    				taille += format(i, 1);
    			}
    		}
     
    		_taille = atoi(taille.getChaine());
     
    		*_chaine = new char[_taille+1];
     
    		sprintf(*_chaine, format.getChaine(), nombre);
     
    	}
    	else
    	{
    		_taille = 0;
     
    		*_chaine = new char[1];
     
    		_chaine[0] = '\0';
    	}
    }
     
    //------------------------------------------------------------------------
    CChaine::~CChaine()
    {
    	if (_taille != 0)
    		delete[] (*_chaine);
    	else
    	    delete *_chaine;
    	delete _chaine;
    }
     
    //------------------------------------------------------------------------
    CChaine& CChaine::operator=(const CChaine& cchaine)
    {
    	if (this != &cchaine)
    	{
    		if ( _taille > 0)
    			delete[] (*_chaine);
    		else
    			delete *_chaine;
     
    		_taille = cchaine.getLongueur();
     
    		*_chaine = new char[_taille + 1];
     
    		sprintf(*_chaine,"%s", cchaine.getChaine());
    	}
     
    	return *this;
    }

    Voilà le main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int main(int argc, char* argv[])
    {
     
    	double test_double = 12345.21; //1234.214 OK - 12345.214 KO -  12345.21 KO
     
    	CChaine test_chaine;
    	const CChaine format = "%6.1f";
    	test_chaine = CChaine(test_double, format);
     
                 return 0;
    }
    test_chaine = CChaine(test_double, format);
    donne
    1°/ Appel au constructeur : OK
    2°/ Appel à la fonction "=" : OK
    3°/ Appel au destructeur (là je sais pas pourquoi) : OK pour certains nombres et pas d'autres

    Quel est le soucis?

    Merci d'avance.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    J'ai rajouté ça dans la fonction de conversion de double en CChaine (mais ça paraît un peu bricolage du dimanche)


    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
    CChaine::CChaine(double nombre, const CChaine& format)
    {
    	short int pos = format.cherche("%");
     
    	CChaine taille;
     
    	_chaine = new char*;
     
    	if (pos != -1)
    	{
    		for (unsigned short int i = pos + 1 ;
    				i < (unsigned short int)format.getLongueur() && format(i, 1).estEntier() ; i++)
    		{
    			if (format(i, 1).estEntier())
    			{
    				taille += format(i, 1);
    			}
    		}
     
     
    		_taille = atoi(taille.getChaine()); //%3.1 --> _taille = 3
     
     
     
    		///////////////////////////////////////////////////
    		//Ajout 27/04/2007 (debut)
    		char temp_char[256];
    		sprintf(temp_char, "%f", nombre);
    		CChaine temp_chaine = temp_char;
    		pos = temp_chaine.cherche(".", i);
     
    		if(pos > _taille)
    			_taille = pos; //Si on a 12345.123, %3.1 donne 12345.1
     
    		_taille++; //il faut aussi un caractère pour le "."			
    		//Ajout 27/04/2007 (fin)
    		///////////////////////////////////////////////////
     
    		*_chaine = new char[_taille+1];
     
    		sprintf(*_chaine, format.getChaine(), nombre);
     
    	}
    	else
    	{
    		_taille = 0;
     
    		*_chaine = new char[1];
     
    		_chaine[0] = '\0';
    	}
    }

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Euh...
    Pourquoi alloues-tu dynamiquement ton char* ?

Discussions similaires

  1. Réponses: 8
    Dernier message: 06/05/2007, 22h47
  2. [FLASH 8] Problème classe perso
    Par julien.63 dans le forum Flash
    Réponses: 4
    Dernier message: 07/02/2007, 20h30
  3. Réponses: 5
    Dernier message: 26/07/2006, 12h13
  4. Réponses: 3
    Dernier message: 26/05/2006, 20h49
  5. probleme classe et chaines de caractères
    Par oilv dans le forum C++
    Réponses: 12
    Dernier message: 18/02/2006, 11h01

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