merci pour ta réponse, voila le code :
#include <stdlib.h>
#include
#include<string>
#include<fstream>
#include<ctype.h>
#include "StringTokenizer.h"
using namespace std;
/*******************************************************************************
**************************classe element-liste*********************************
*******************************************************************************/
class element_liste
{
string data;
element_liste *next;
public:
element_liste(string contenu,element_liste *suiv)
{
data=contenu;
next=suiv;
}
element_liste(string contenu)
{
data=contenu;
next=NULL;
}
friend class liste;
friend class abr;
};
/********************************************************************************
**************************classe element_abr************************************
********************************************************************************/
class element_abr
{
private:
string val;
element_abr * fg;
element_abr * fd;
public:
element_abr()
{
val="";
fg=NULL;
fd=NULL;
}
element_abr(string contenu)
{
val=contenu;
fg=NULL;
fd=NULL;
}
friend class abr;
friend class liste;
};
/*******************************************************************************
**************************classe abr*******************************************
*******************************************************************************/
class abr
{
private:
element_abr * racine;
string file;
public:
abr(string file_name);
~abr();
void inserer (element_abr **racine,string mot);
void supprimer(element_abr **racine,string mot);
int rechercher(element_abr *racine,string mot);
void convertir_maj(element_abr *racine);
void detruire(element_abr *racine) ;
void view(element_abr *racine) ;
void insert_fichier(element_abr*racine,ofstream &f);
string getfile();
element_abr * getracine();
string fichier_resultant(string file1,string file2);
element_abr* insert_liste(element_liste **first,int n);
friend abr operator +(abr,abr);
};
//-------------------------------constructeur------------------------------------
abr::abr(string file_name)
{ string s;
file=file_name;
ifstream f(file.c_str());
if(!f.is_open())
{
cout<<"impossible d'ouvrir le fichier en lecture !!!"<<endl;
racine=new element_abr();
}
else
{
while(getline(f,s))
inserer(&racine,s);
}
f.close();
}
//------------------------------insertion----------------------------------------
void abr::inserer (element_abr **racine,string mot)
{
if(!rechercher(*racine,mot))
{
if(*racine)
{
if(((*racine)->val).compare(mot)<=0) inserer(&((*racine)->fg),mot) ;
else inserer(&((*racine)->fd),mot);
}
else
{
*racine=new element_abr(mot);
}
}
}
//-------------------------------recherche---------------------------------------
int abr::rechercher(element_abr *racine,string mot)
{
if(racine)
{
if(racine->val.compare(mot)==0) return(1);
if((racine->val).compare(mot)<0) return(rechercher(racine->fg,mot));
return(rechercher(racine->fd,mot));
}
return(0);
}
//-------------------------------supprission-------------------------------------
void abr::supprimer(element_abr **racine,string mot)
{
element_abr *p,**t;
if(*racine)
{
if((*racine)->val.compare(mot)!=0)
{
if(((*racine)->val).compare(mot)<0) supprimer(&((*racine)->fg),mot);
else supprimer(&((*racine)->fd),mot);
}
else
{
if(!((*racine)->fd))
{
p=*racine;
*racine=(*racine)->fg;
delete(p);
}
else
{
if(!((*racine)->fg))
{
p=*racine;
*racine=(*racine)->fd;
delete(p);
}
else
{
t=&((*racine)->fg);
while((*t)->fd)
t=&((*t)->fd);
p=*t;
(*racine)->val=(*t)->val;
*t=(*t)->fg;
delete(p);
}
}
}
}
}
//-------------------------------convertion--------------------------------------
void abr::convertir_maj(element_abr *racine)
{
if(racine)
{
convertir_maj(racine->fg);
convertir_maj(racine->fd);
for(int i =0;racine->val.size();i++)
racine->val[i]=toupper(racine->val[i]);
}
}
//--------------------------------detruire---------------------------------------
void abr::detruire(element_abr *racine)
{
if(racine != NULL)
{
detruire(racine->fg);
detruire(racine->fd);
delete(racine);
}
}
//-----------------------------destructeur---------------------------------------
abr::~abr()
{
ofstream f(file.c_str());
if(!f)
cout<<"impossible d'ouvrir le fichier en ecriture!!!"<<endl;
else
{
insert_fichier(racine,f) ;
detruire(racine);
racine=NULL;
}
}
//----------------------------insertion fichier----------------------------------
void abr::insert_fichier(element_abr*racine,ofstream &f)
{
if(racine)
{
insert_fichier(racine->fg,f);
f << racine->val << "\n" ;
insert_fichier(racine->fd,f);
}
}
//---------------------------insertion liste abr---------------------------------
element_abr* abr::insert_liste(element_liste **first,int n)
{
if (n<=0) return(new element_abr());
element_abr *gauche=insert_liste(&(*first),n/2);
element_abr *a=new element_abr((*first)->data);
a->fg=gauche;
*first=(*first)->next;
a->fd=insert_liste(&(*first),n-n/2-1);
return(a);
}
//-----------------------------affichage arbre-----------------------------------
void abr::view(element_abr *racine)
{
if(racine != NULL)
{
view(racine->fg);
cout<<(racine->val)<<endl;
view(racine->fd);
}
else
cout<<"larbre est vide"<<endl;
}
//---------------------------------get_file--------------------------------------
string abr::getfile()
{
return(file);
}
//--------------------------------get_racine-------------------------------------
element_abr* abr::getracine()
{
return(racine);
}
//--------------------------------nom fichier resultant--------------------------
string abr::fichier_resultant(string file1,string file2)
{
string s3;
StringTokenizer s1(file1,".");
StringTokenizer s2(file2,".");
while(s1.hasMoreTokens())
{
s3=s1.nextToken()+ s2.nextToken();
s3=s3+s1.nextToken();
}
return(s3);
}
/*******************************************************************************
**************************classe liste*****************************************
*******************************************************************************/
class liste
{
private:
element_liste *first;
public :
liste();
~liste();
void insert(string valeur);
void create(element_abr* racine);
string lire_data(element_abr* racine);
void fusion(element_liste **first,element_liste *a,element_liste *b);
element_liste* getfirst();
int nb_element(element_liste*first);
friend abr operator +(abr,abr);
};
//---------------------------------destructeur-----------------------------------
liste::~liste()
{
element_liste *save;
for( element_liste *p=first;p;)
{
save=p;
p=p->next;
delete(save);
}
}
//--------------------------------constructeur-----------------------------------
liste::liste()
{
first=NULL;
}
//-----------------------------insertion-liste-----------------------------------
void liste::insert(string valeur)
{
first= new element_liste(valeur,first);
}
//------------------------------creation-liste-----------------------------------
void liste::create(element_abr* racine)
{
string s;
while((s = lire_data(racine))!="")
insert(s);
}
//----------------------------------lire_data------------------------------------
string liste::lire_data(element_abr* racine)
{
string s;
if(racine)
{
s=lire_data(racine->fd);
s=racine->val;
s=lire_data(racine->fg);
return(s);
}
return("");
}
//-----------------------------fusionner deux listes-----------------------------
void liste::fusion(element_liste **first,element_liste *a,element_liste *b)
{
if (a == NULL)
*first=b;
else if (b==NULL)
*first=a;
if (a->data <= b->data)
{
*first = a;
fusion(&((*first)->next),a->next, b);
}
else
{
*first = b;
fusion(&((*first)->next),a, b->next);
}
}
//----------------------------------get-first------------------------------------
element_liste* liste::getfirst()
{
return(first);
}
//-------------------------------nombre d'elements-----------------------------
int liste::nb_element(element_liste*first)
{
if(first)
return(1+nb_element(first->next));
return(0);
}
//***********************************operateur +*********************************
abr operator +(abr p1,abr p2)
{
element_liste *p; liste l1;liste l2;liste l3;
abr p3(p3.fichier_resultant(p1.file,p2.file));
l1.create(p1.racine);
l2.create(p2.racine);
p=l3.getfirst();
l3.fusion(&p,l1.getfirst(),l2.getfirst());
int n=l3.nb_element(l3.getfirst());
p3.racine= p3.insert_liste(&p,n);
return(p3);
}
//-----------------------------fin operateur + ----------------------------------
//-------------------------------affichage du fichier----------------------------
void affichage_fichier(string s)
{
ifstream fichier(s.c_str());
if(fichier)
{
string ligne;
while(getline(fichier, ligne))
cout << ligne << endl;
}
else
cout << "ERREUR: Impossible d'ouvrir le fichier en lecture." << endl;
}
/*******************************************************************************
**************************main*******************************************
*******************************************************************************/
int main()
{
string s;
int a;
cout << "Tapez le nom du fichier a traiter : ";
cin >> s;
system(" color ec");
do
{
cout << "1:creer une abr avec le contenu du fichier\n2:ajouter un mot a l'abr\n3:supprimer un mot a l'abr\n4:rechercher un mot a l'abr\n";
cout << "5:convertir en majusculeles mots contenus dans l'abr\n6:voir le fichier trie\n7:additionner deux abr\n";
cout << "8:afficher le fichier resultant de l'addition\n0:Quitter le programme\n";
cin >> a;
}
while(a<0||a>8);
switch(a)
{
case 1:
{
abr d(s);
d.view(d.getracine());
break;
}
case 2:
{
string s1;
cout << "Tapez le mot pour l'ajouter : ";
cin >> s1;
abr d(s);
element_abr *p=d.getracine();
d.inserer(&p,s1);
d.view(d.getracine());
break;
}
case 3:
{
string s2;
cout << "Tapez le mot pour le supprimer : ";
cin >> s2;
abr d(s);
element_abr *p=d.getracine();
d.supprimer(&p,s2);
d.view(d.getracine());
break;
}
case 4:
{
string s3;
cout << "Tapez le mot pour le rechercher : ";
cin >> s3;
abr d(s);
if(d.rechercher(d.getracine(),s3))
cout << "l'abr contient ce mot";
else cout << "ce mot n'exsite pas dans l'abr ";
break;
}
case 5:
{
abr d(s);
d.convertir_maj(d.getracine());
d.view(d.getracine());
break;
}
case 6:
{
abr d(s);
d.~abr();
affichage_fichier(d.getfile());
break;
}
case 7:
{
string s4,s5;
cout << "Tapez les noms du fichiers a additionner : ";
cin >> s4>>s5;
abr a(s4);
abr b(s5);
abr c=a+b;
c.view(c.getracine());
break;
}
case 8:
{
string s4,s5;
cout << "Tapez les noms du fichiers a additionner : ";
cin >> s4>>s5;
abr a(s4);
abr b(s5);
abr c=a+b;
c.~abr();
affichage_fichier(c.getfile());
break;
}
case 0:
exit(0);
}
do
{
cout << "Choisir 1:continuer ou 0:Quitter\n";
cin >> a;
if(a)
{
system("cls");
do
{
cout << "1:creer une abr avec le contenu du fichier\n2:ajouter un mot a l'abr\n3:supprimer un mot a l'abr\n4:rechercher un mot a l'abr\n5:convertir en majusculeles mots contenus dans l'abr\n6:voir le fichier trie\n7:additionner deux abr\n8:afficher le fichier resultant de l'addition\n0:Quitter le programme\n";
cin >> a;
}
while(a<0||a>8);
switch(a)
{
case 1:
{
abr d(s);
d.view(d.getracine());
break;
}
case 2:
{
string s1;
cout << "Tapez le mot pour l'ajouter : ";
cin >> s1;
abr d(s);
element_abr *p=d.getracine();
d.inserer(&p,s1);
d.view(d.getracine());
break;
}
case 3:
{
string s2;
cout << "Tapez le mot pour le supprimer : ";
cin >> s2;
abr d(s);
element_abr *p=d.getracine();
d.supprimer(&p,s2);
d.view(d.getracine());
break;
}
case 4:
{
string s3;
cout << "Tapez le mot pour le rechercher : ";
cin >> s3;
abr d(s);
if(d.rechercher(d.getracine(),s3))
cout << "l'abr contient ce mot";
else cout << "ce mot n'exsite pas dans l'abr ";
break;
}
case 5:
{
abr d(s);
d.convertir_maj(d.getracine());
d.view(d.getracine());
break;
}
case 6:
{
abr d(s);
d.~abr();
affichage_fichier(d.getfile());
break;
}
case 7:
{
string s4,s5;
cout << "Tapez les noms du fichiers a additionner : ";
cin >> s4>>s5;
abr a(s4);
abr b(s5);
abr c=a+b;
c.view(c.getracine());
break;
}
case 8:
{
string s4,s5;
cout << "Tapez les noms du fichiers a additionner : ";
cin >> s4>>s5;
abr a(s4);
abr b(s5);
abr c=a+b;
c.~abr();
affichage_fichier(c.getfile());
break;
}
}
}
else
if(!a)
exit(0);
}
while(a);
system("PAUSE");
return (0);
}