Encore les pointeurs ...
Résolu/Fermé
ax3000
Messages postés
8
Date d'inscription
mercredi 29 janvier 2014
Statut
Membre
Dernière intervention
5 février 2015
-
Modifié par Whismeril le 27/12/2014 à 22:48
jobertomeu Messages postés 1186 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 5 février 2015 - 5 févr. 2015 à 19:46
jobertomeu Messages postés 1186 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 5 février 2015 - 5 févr. 2015 à 19:46
5 réponses
jobertomeu
Messages postés
1186
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
5 février 2015
85
4 févr. 2015 à 23:19
4 févr. 2015 à 23:19
Salut,
je t'avouerai que je n'ai pas eu le courage de lire ton code, mais j'ai fait rapidement une petite version un peu plus compréhensible, à mon gout, mais qui se doit d'être bien plus optimisée, voici ma proposition :
je t'avouerai que je n'ai pas eu le courage de lire ton code, mais j'ai fait rapidement une petite version un peu plus compréhensible, à mon gout, mais qui se doit d'être bien plus optimisée, voici ma proposition :
typedef struct s_header
{
int maj;
int min;
int spec;
int alpha;
} t_header;
int isMaj(char c)
{
return ((c >= 'A' && c <= 'Z') ? 1 : 0);
}
int isMin(char c)
{
return ((c >= 'a' && c <= 'z') ? 1 : 0);
}
int isSpec(char c)
{
int i;
char sep[] = " ,.!?;:[]#{(-_+)}/°\'";
for (i = 0; i < strlen(sep); i++) {
if (c == sep[i])
return (1);
}
return (0);
}
int isAlpha(char c)
{
return ((c >= '0' && c <= '9') ? 1 : 0);
}
void foundChar(t_header *header, char *str)
{
int i = 0;
while (str[i]) {
if (isMaj(str[i]))
header->maj++;
else if (isMin(str[i]))
header->min++;
else if (isSpec(str[i]))
header->spec++;
else if (isAlpha(str[i]))
header->alpha++;
i++;
}
}
void initHeader(t_header *header)
{
header->maj = 0;
header->min = 0;
header->spec = 0;
header->alpha = 0;
}
int main()
{
char *str = "Bonjour je suis John, j\'ai 42 ans et il fait 42°C";
t_header header;
initHeader(&header);
foundChar(&header, str);
printf("Nombre de majuscules : %d\n", header.maj);
printf("Nombre de minuscule : %d\n", header.min);
printf("Nombre de char. spec. : %d\n", header.spec);
printf("Nombre de char. alpha : %d\n", header.alpha);
return (0);
}
jobertomeu
Messages postés
1186
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
5 février 2015
85
Modifié par jobertomeu le 5/02/2015 à 00:04
Modifié par jobertomeu le 5/02/2015 à 00:04
Je me permet de reposter une autre version un peu plus aboutie mais nécessitant encore des motifs à faire de ta part ;).
typedef struct s_header
{
int maj;
int min;
int spec;
int alpha;
} t_header;
void isMaj(t_header *header, char c)
{
header->maj += (c >= 'A' && c <= 'Z') ? 1 : 0;
}
void isMin(t_header *header, char c)
{
header->min += (c >= 'a' && c <= 'z') ? 1 : 0;
}
void isSpec(t_header *header, char c)
{
int i;
char sep[] = " ,.!?;:[]#{(-_+)}/°\'";
for (i = 0; i < strlen(sep); i++) {
if (c == sep[i])
header->spec += 1;
}
}
void isAlpha(t_header *header, char c)
{
header->alpha += (c >= '0' && c <= '9') ? 1 : 0;
}
void initPointerTable(void (*pointerTable[3])(t_header *, char))
{
pointerTable[0] = &isMaj;
pointerTable[1] = &isMin;
pointerTable[2] = &isSpec;
pointerTable[3] = &isAlpha;
}
void foundChar(t_header *header, char *str)
{
int i = 0, j;
void (*pointerTable[4])(t_header *, char);
initPointerTable(pointerTable);
while (str[i]) {
j = 0;
while (j < 4)
pointerTable[j++](header, str[i]);
i++;
}
}
void initHeader(t_header *header)
{
header->maj = 0;
header->min = 0;
header->spec = 0;
header->alpha = 0;
}
int main()
{
char *str = "Bonjour je suis John, j\'ai 42 ans et il fait 42°C";
t_header header;
initHeader(&header);
foundChar(&header, str);
printf("Nombre de majuscules : %d\n", header.maj);
printf("Nombre de minuscule : %d\n", header.min);
printf("Nombre de char. spec. : %d\n", header.spec);
printf("Nombre de char. alpha : %d\n", header.alpha);
return (0);
}
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 816
5 févr. 2015 à 00:03
5 févr. 2015 à 00:03
Bonjour,
Mes remarques sur ton code :
Déjà, il manque les #include, et les prototypes des fonctions.
main()
Le bon prototype est : int main(void)
Lire_Chaine_Dynamique()
Il est où le code ? Dans une bibliothèque ?
CompteNombreDE (chaine,&nbmaj,&nbmin,&nbchif, ec);
Où est défini la fonction "ec" ?
//free(nbmaj); free(nbmin); free(nbchif); free(nbspec);
C'est en commentaire, mais tu peux le supprimer quand même. Aucune chance que ça marche.
*nbmaj++;
Attention aux priorités. Ici, ça sera plutôt : (*nbmaj)++;
N'oublie pas de corriger pour les autres variables.
Cdlt,
Mes remarques sur ton code :
Déjà, il manque les #include, et les prototypes des fonctions.
main()
Le bon prototype est : int main(void)
Lire_Chaine_Dynamique()
Il est où le code ? Dans une bibliothèque ?
CompteNombreDE (chaine,&nbmaj,&nbmin,&nbchif, ec);
Où est défini la fonction "ec" ?
//free(nbmaj); free(nbmin); free(nbchif); free(nbspec);
C'est en commentaire, mais tu peux le supprimer quand même. Aucune chance que ça marche.
*nbmaj++;
Attention aux priorités. Ici, ça sera plutôt : (*nbmaj)++;
N'oublie pas de corriger pour les autres variables.
Cdlt,
ax3000
Messages postés
8
Date d'inscription
mercredi 29 janvier 2014
Statut
Membre
Dernière intervention
5 février 2015
5 févr. 2015 à 00:35
5 févr. 2015 à 00:35
Merci à tous, j'ai trouvé mon (mes) erreur(s), et maintenant ça roule (sans avoir utilisé le code de jobertomeu que j'avoue ne pas avoir entièrement compris). Quant à fiddy, évidemment j'avais mis les include je les ai juste pas copier coller ici, mais pour le reste bien vu :)
Encore merci !
Encore merci !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jobertomeu
Messages postés
1186
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
5 février 2015
85
5 févr. 2015 à 19:46
5 févr. 2015 à 19:46
Si tu as des questions, n'hésites pas ! :)