Il suffit dutiliser une chaîne de caractères normale, plus un pointeur indiquant lemplacement du début du prénom ; selon les besoins, on placera un zéro ou un blanc entre les deux. De même, un autre pointeur indiquera la séparation entre les deux prénoms orientaux. Ce second séparateur est à zéro pour un occidental :
class noms { char chaine[32]; char *separateur; // adresse du zéro ou blanc char *separateur2; // adresse du zéro ou tiret public : noms(char *nom, char *prenom1, char *prenom2 = 0) { int i = (prenom2 ? 10 : 15); strncpy(chaine, nom, i); separateur = strchr(chaine, 0); separateur2 = separateur+1; strncpy(separateur2, prenom1, i); if (prenom2) { separateur2 = strchr(separateur2, 0); strncpy(separateur2+1, prenom2, i); } else separateur2 = 0; } char *nom(void) { *separateur = 0; return chaine; } char *prenom1(void) { if (separateur2) *separateur2 = 0; return separateur+1; } char *prenom2(void) { if (separateur2) return separateur2+1; else return ""; } char *prenomcomplet(void) { if (separateur2) *separateur2 = '-'; return 1+separateur; } char *nomcomplet(void) { *separateur = ' '; prenomcomplet(); return chaine; } };
Cette classe noccupe que cinq octets de plus que lautre, et la facilité des opérations est un gain de temps important. On notera dailleurs que lon nest plus obligé de tronquer les chaînes : si un nom fait 20 caractères et le prénom 8, on peut les placer ensemble ; une meilleure implantation du constructeur est donc possible (nouvel exercice...).