Coucou,
J'ai du mal avec un exercice d'entraînement des années passées que j'essaie de faire en C. Soyez indulgents s'il vous plaît, j'ai essayé de donner toutes les données possibles et d'écrire le moins d'absurdités possibles ... Il est évident que je passe à côté de quelque chose de très con au niveau des pointeurs mais j'ai fini par m'emmêler les pinceaux et ça fait super longtemps que j'avais plus mis le nez dans les astérisques. Désolé pour l'indentation qui n'est pas passée avec le copier coller depuis notepad++.
Il y a ici plusieurs problèmes, je sais même pas si l'algorithme est correct et de plus je n'ai aucune idée de sous quelle forme me reviennent tous les appels de la fonction nboccmax (qui d'ailleurs ne porte pas un nom correct, je vais changer ça). Bref, à l'aide !
Voici l'énoncé de l'exercice :
LIMITE DE MEMOIRE
1000 ko
LIMITE DE TEMPS
125 ms
ENONCE
On vous donne une chaîne de caractères. Écrire une fonction qui renvoie le nombre d'occurences de la lettre la plus présente dans cette chaîne, sans distinction majuscule/minuscule. On ignore les lettres accentuées.CONTRAINTES
1ENTREE
Sur l'entrée standard, on vous fournit deux lignes :Le nombre de caractères N de la chaîne.
La chaîne elle-même, composée uniquement de lettres minuscules et majuscules non-accentuées, et d'espaces.SORTIE
Vous devez écrire une ligne sur la sortie standard : le nombre d'occurrences de la lettre la plus présente dans la chaîne fournie.EXEMPLE(S) D'ENTREE/SORTIE
Exemple 1
en entrée ...42
dCAbACCcabbbdbddCdADACbACBACDDCdcBadddCDdcen sortie ...
14
Voici le code que j'ai commencé à faire :
1 2 | #include stdio.h #include conio.h // pour le getch();, pour faire une pause - getchar(); ne le fait pas - ??? |
int nboccmax(int N,char str,int i,int nb,char current);
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 | int main(int argc, char *argv[]) { int N; // taille de la chaîne de caractères préalablement donnée scanf("%d",&N); char str[N]; // d'après l'énoncé, chaîne de caractères de taille N scanf("%s",str); printf("N : %d\nstr : %s\n",N,str); // petite vérification int nb = nboccmax(N,str,0,0,""); // ce n'est pas la réponse, mais le maximum de toutes les valeurs renvoyées devrait être le bon résultat printf("%d",nb); // autre vérification getch(); // de conio.h, pour faire une pause - getchar(); ne le fait pas - ??? return 0; } int nboccmax(int N,char str,int i,int nb,char current) // cette fonction renvoie la série d'occurrences d'un caractère depuis sa position dans la chaîne de caractères str jusqu'à la fin ; il y a des appels inutiles puisqu'elle est rappelée plusieurs fois pour le même caractère si deux occurrences de ce dernier sont séparées par un caractère différent ; cependant le maximum des valeurs renvoyées est le nombre que l'on cherche { if(i { if(current == str[i]) // si le caractère de la chaîne analysé est le même que "current", on rajoute 1 au nombre d'occurences et on rappelle la fonction pour le caractère suivant { nb++; i++; nboccmax(N,str,i,nb,current); } else // si le caractère n'est pas le même, on appelle la fonction pour calculer le nombre d'occurrences de ce caractère (avec nb = 1 puisqu'on l'a déjà "vu" une fois) { char current = str[i]; int nb = 1; i++; nboccmax(N,str,i,nb,current); } } else { return nb; // cas de base : si on a fini de lire la chaîne de caractères on renvoie le nombre d'occurences de "current" } return 0; } |
Voici l'erreur renvoyée par le compilateur :
qcm2002_occchar.c: In function 'main':
qcm2002_occchar.c:13:2: warning: passing argument 2 of 'nboccmax' makes integer from pointer without a cast
qcm2002_occchar.c:4:5: note: expected 'char' but argument is of type 'char *'
qcm2002_occchar.c:13:2: warning: passing argument 5 of 'nboccmax' makes integer from pointer without a cast
qcm2002_occchar.c:4:5: note: expected 'char' but argument is of type 'char *'
qcm2002_occchar.c: In function 'nboccmax':
qcm2002_occchar.c:23:20: error: subscripted value is neither array nor pointer
qcm2002_occchar.c:31:22: error: subscripted value is neither array nor pointer