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 1189 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 1189 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
1189
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
5 février 2015
86
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
1189
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
5 février 2015
86
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 843
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
1189
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
5 février 2015
86
5 févr. 2015 à 19:46
5 févr. 2015 à 19:46
Si tu as des questions, n'hésites pas ! :)