soucis avec une classe de string
Bonjour à tous, je désire implementer une classe de chaine de carcatères caractères.Chaque objet de cette classe est donc une chaine de carctères Avec cette classe, l’utilisateur doit être capable de :
de créer une chaîne de plusieurs manières différentes prévoir des constructeurs necessaires et le constructeur par copie
Voici mon code, il comporte 6 erreurrs dans le main au niveau du 2 eme switch dans le main, mais je n'arive pas à me corriger.
Merci d'avance
Coold
fichier.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #ifndef CCAHINE_H
#define CCHAINE_H
class CChaine
{
public:
CChaine(void);
CChaine(char * psChaine);//constructeur avec 1 paramètres
CChaine::CChaine (const CChaine &);//constructeur par copie
void Affiche(void);//fonction d'affichage de la chiane de caractères
~CChaine(void);//destructeur de la classe
private:
// longueur de la chaine de caractere
int m_dLong;
//pointeur de la chaine de caractère
char *m_psTab;
public:
};
#endif |
fichier.cpp
Code:
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
| #include "CChaine.h"
#include<iostream>
#include<assert.h>
#include<string.h>
// constructeur par defaut
CChaine::CChaine(void)
: m_dLong(0)
, m_psTab(NULL)
{
}
//***********************
//constructeur par copie
//***********************
CChaine::CChaine (const CChaine &oCh)
: m_dLong(0)
{
m_dLong = oCh. m_dLong;
m_psTab = new char [m_dLong + 1];
assert (m_psTab != 0);
strcpy (m_psTab , oCh.m_psTab);
}
//*****************************
//constructeur avec 2 paramètres
//*****************************
CChaine::CChaine(char * psChaine)
:m_dLong(0)
{
m_dLong = strlen(psChaine);
m_psTab = new char [m_dLong + 1];
assert (m_psTab != 0);
strcpy(m_psTab , psChaine);
}
CChaine::~CChaine(void)
{
delete[] m_psTab;
}
//*************************************************
// fonxtion d'affichage de la chiane de caractères
//*************************************************
void CChaine::Affiche(void)
{
for(int dI = 0; dI < m_dLong; dI++)
std::cout << m_psTab[dI];
} |
et le fichier main.cpp
Code:
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 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
#include"CChaine.h"
#include <stdexcept>
#include <limits> //pour std::limits
#include<iostream>
//**********************************************************************************
//Implémenter une classe CChaine. Chaque objet de cette classe représente
//une chaîne de caractères. Avec cette classe, lutilisateur doit être capable de :
// De créer une chaîne de plusieurs manières différentes
// --> quels constructeurs faut-il prévoir ?
// Définition du constructeur par copie
//***********************************************************************************
int Menu()
{
int dChoix = 0;
std::cout << "Veuillez choisir l'action suivante :" << std::endl;
//-------------------------------------------------------------------
// si l'utilisateur ne fait pas le bon choix, on lui affiche le menu
// et lecture de son choix
// Tant qu'input n'est pas 1 chiffre => ignoré
// Traitement du cas où le choix ,'est pas dans l'intervalle
//retour du choix
//------------------------------------------------------------------
while(dChoix < 1 || dChoix > 3)
{
std::cout << "1 - creer une nouvelle chaine " << std::endl
<< "2 - afficher la chaine " << std::endl
<< "3 - quitter" << std::endl;
std::cout << "\nVotre choix ? ";
while(!(std::cin >> dChoix))
{
std::cout << "veuillez introduire des chiffres uniquement..." << std::endl
<< "Votre choix ?";
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
if(dChoix < 1 || dChoix > 3)
std::cout << "veuillez choisir une valeur entre 1 et 3" << std::endl;
}
return dChoix;
}
int MenuCreation()
{
int dChoixCr;
std::cout << "10 - creer une nouvele chaine avec le c'tor avec 1 parametre " << std::endl
<< "11 - creer une nouvele chaine avec le c'tor par copie" << std::endl
<< "12 - quitter" << std::endl;
std::cout << "\nVotre choix ? ";
while(!(std::cin >> dChoixCr))
{
std::cout << "veuillez introduire des chiffres uniquement..."<<std::endl
<< "Votre choix ?";
std::cin.clear();
std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
}
if(dChoixCr < 10 || dChoixCr > 12)
std::cout << "veuillez choisir une valeur entre 10 et 12" << std::endl;
return dChoixCr;
}
int main()
{
int dLong;
int dChoix = 0;
std::cout << "PRJ03 Classe CChaine\n\n"
<< "Application permettant la gestion de chaines de caracteres"
<< std::endl;
std::cout << "Que voulez-vous faire ?";
dChoix = Menu();
try
{
CChaine oChaine;
int dChoix = 0;
while(dChoix != 3)
{
dChoix = Menu(); // on demande le choix de l'utilisateur
switch(dChoix)
{
case 1:
int dCh_Create = 0;
char sTabMsg;
while(dCh_Create != 12)
{
dCh_Create = MenuCreation();
switch(dCh_Create)
{
case 10:
//std::cout << "entrer la chaine " ;
//std::cin >> sTabMsg;
oChaine("sTabMsg");
break;
case 11:
std::cout << " Entrer la chaine " ;
std::cin >> sTabMsg;
oChaine(sTabMsg);
oChaine2(oChaine);
break;
case 12:
break;
default:
break;
}
}
case 2:oChaine.Affiche();
break;
case 3:
default:
break;
}
}
}
catch(std::bad_alloc &e)
{
std::cout << "une erreur est survenue lors de l'initialisation " << std::endl
<< "il m'est impossible de continuer"<<std::endl;
return 1;//on n'a pas pu travailler correctement
}
return 0;
} |