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 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
| #include <stdio.h> /* Déclaration des fonctions d'E/S standard */
#include <stdlib.h> /* Déclaration des fonctions de la librairie C standard */
#include <stdbool.h> /* Pour le type bool (avec false, true) */
#include <string.h> /* Pour strlen, strcpy, strcat, ... */
#include <ctype.h> /* Pour la fonction "tolower" */
/* Déclaration (prototype) des diverses fonctions à réaliser : */
char sansAccent(char c);
void oteAccent(char x[]);
void oteEspace(char x[]);
const int MAX = 30; /* Déclaration de la longueur maximum des listes chainées */
void login(char prenom [],char nom [],char id[]);
void courriel(char prenom[], char nom[], char mail[]);
/* --------------------- Programme principal --------------------- */
int main(void)
{
char nom[MAX];
char prenom[MAX];
char id[9]; /* pour le login: 8 + '\0' de fin */
char mail[2*MAX]; /* pour les chaines Nom et Prenom: 2x30 */
printf("Saisir le prenom : \t");
fgets(prenom, MAX, stdin);
printf("Saisir le nom : \t");
fgets(nom, MAX, stdin);
/* on decremente le caractere de saut de ligne
des chaines nom et prenom saisies */
prenom[strlen(prenom)-1]='\0';
nom[strlen(nom)-1]='\0';
/* fin décrémentation */
oteAccent(prenom);
oteAccent(nom);
printf("Sans accents : %s %s\t", prenom, nom);
oteEspace(prenom);
oteEspace(nom);
printf("\nSans espaces : %s %s\t", prenom, nom);
login(prenom, nom, id);
printf("\nLogin : %s\t", id);
courriel(nom, prenom, mail);
printf("\nMail : %s@iut-valence.fr\t\n", mail);
return EXIT_SUCCESS;
}
/* --------------------- Définition des fonctions --------------------- */
/* sansAccent : transforme un caractère accentué en la même lettre mais
* sans accent (é -> e, ç -> c, À -> A, ...)
* Entrées : le caractère
* Sorties : le même sans accent, ou le même s'il n'avait pas d'accent */
char sansAccent(char c)
{
switch (c)
{
case 'à': case 'á': case 'â': case 'ã': case 'ä': case 'å':
return 'a';
case 'À': case 'Á': case 'Â': case 'Ã': case 'Ä': case 'Å':
return 'A';
case 'ç':
return 'c';
case 'Ç':
return 'C';
case 'é': case 'è': case 'ê': case 'ë':
return 'e';
case 'É': case 'È': case 'Ê': case 'Ë':
return 'E';
case 'ì': case 'í': case 'î': case 'ï':
return 'i';
case 'Ì': case 'Í': case 'Î': case 'Ï':
return 'I';
case 'ñ':
return 'n';
case 'Ñ':
return 'N';
case 'ò': case 'ó': case 'ô': case 'õ': case 'ö':
return 'o';
case 'Ò': case 'Ó': case 'Ô': case 'Õ': case 'Ö':
return 'O';
case 'ù': case 'ú': case 'û': case 'ü':
return 'u';
case 'Ù': case 'Ú': case 'Û': case 'Ü':
return 'U';
case 'ý': case 'ÿ':
return 'y';
case 'Ý':
return 'Y';
default:
return c;
}
}
/* oteAccent : remplace dans une chaîne les caractères accentués
par des caractères non accentués équivalents */
void oteAccent(char x[])
{
int i;
for(i = 0 ; x[i] != '\0' ; i++)
x[i] = sansAccent(x[i]);
}
/* oteEspace : remplace dans une chaîne les espaces par des tirets */
void oteEspace(char x[])
{
/* Recherche du caractère ' ' sur la chaine */
char *p = strchr (x, ' ');
while (p != NULL)
{
*p = '-'; /* Le caractère pointé par p prend pour valeur "-" */
p = strchr (x, ' ');
}
}
/* --------------------- Definition de la procédure login ------------------- */
/* la fonction login permet de calculer un Adresse d'une longueur
* maximale de 8 caracteres en retenant la premiere lettre du prenom
* et au plus les 7 premieres lettres du nom */
void login(char prenom [],char nom [],char id [8])
{
/* la premiere lettre du prenom en mininuscule est ajoutee à Identifiant */
id[0]=tolower(prenom[0]);
int i=1; int j=0;
/* parcours schema n°1 */
while((i<8) && (nom[j]!='\0'))
{
/* si un ou plusieurs '-' sont present dans le nom,
* on incremente pour psser au caractere suivant */
if(nom[j]=='-') j++;
else
{
/* les caractères en minuscules de Nom sont ajoutés au login */
id[i]=tolower(nom[j]);
j++;i++;
}
}
/* on place une marque à la fin du tableau */
id[i]='\0';
}
/* -------------------- Definition de la procédure courriel ----------------- */
/* la fonction courriel permet de calculer l'adresse électronique au format
* Prenom.Nom@iut-valence.fr */
void courriel(char prenom[], char nom[], char mail[])
{
int i;
char* p;
nom[strlen(nom)]='.';
strcpy(mail,nom);
strcat(mail,prenom);
i=1;
/* on met tout les caracteres de 2 à n en minuscule */
while(mail[i]!='\0')
{
mail[i]=tolower(mail[i]);
i++;
}
/* on met le premier caractere en majuscule */
mail[0]=toupper(mail[0]);
/* on cherche l'emplacement de notre point puis on pointe dessus */
p=strchr(mail,'.');
/* on met le caractere apres le point en majuscule */
p=p+1;
*p=toupper(*p);
} |
Partager