Exercice 67
Énoncé
Réaliser une classe nommée set_char permettant de manipuler des ensembles de
caractères. On devra pouvoir réaliser sur un tel ensemble les opérations classiques
suivantes : lui ajouter un nouvel élément, connaître son « cardinal » (nombre
d’éléments), savoir si un caractère donné lui appartient.
Ici, on n’effectuera aucune allocation dynamique d’emplacements mémoire. Il faudra
donc prévoir, en membre donnée, un tableau de taille fixe.
Écrire, en outre, un programme (main) utilisant la classe set_char pour déterminer le
nombre de caractères différents contenus dans un mot lu en donnée.
N.B. Le chapitre 21 vous montrera comment résoudre cet exercice à l’aide des
composants standard introduits par la norme, et qu’il ne faut pas chercher à utiliser
ici.
Compte tenu des contraintes imposées par l’énoncé (pas de gestion dynamique), une
solution consiste à prévoir un tableau dans lequel un élément de rang i précise si le
caractère de code i appartient ou non à l’ensemble. Notez qu’il est nécessaire que i soit
positif ou nul ; on travaillera donc toujours sur des caractères non signés. La taille du
tableau doit être égale au nombre de caractères qu’il est possible de représenter dans
une implémentation donnée (généralement 256).
Le reste de la déclaration de la classe découle de l’énoncé.
/* fichier SETCHAR1.H */
/* déclaration de la classe set_char */
#define N_CAR_MAX 256 // on pourrait utiliser UCHAR_MAX défini
// dans
class set_char
{
unsigned char ens [N_CAR_MAX] ;
// tableau des indicateurs (présent/absent)
// pour chacun des caractères possibles
public :
set_char () ; // constructeur
void ajoute (unsigned char) ; // ajout d'un élément
int appartient (unsigned char) ; // appartenance d'un élément
int cardinal () ; // cardinal de l'ensemble
} ;
144
Précédent

- 145/398

Suivant