J'ai pondu un code qui passe pour la moitié des tests. Pour l'autre moitié, ça ne passe pas. Pourquoi je ne sais pas. Je ne sais pas non plus ce qui est injecté dans les tests. Avec les miens ça passe. Voici mon code :
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main()
{
char stringToRead[10001];
int count[26][2] = {0};
fgets(stringToRead, sizeof(stringToRead), stdin);
int lenOfReading = strlen(stringToRead);
int maxCount = 0, maxLetter = 0;
for (int i = 0; i < lenOfReading; i++)
{
if(isalpha(stringToRead[i]))
{
int thisChar = tolower(stringToRead[i]);
count[thisChar][0] = thisChar;
count[thisChar][1] += 1;
if (count[thisChar][1] > maxCount)
{
maxCount = count[thisChar][1];
maxLetter = count[thisChar][0];
}
}
}
printf("%c", toupper(maxLetter));
}
Cool merci j'ai compris le principe. Par contre pourquoi des unsigned char ?
isalpha() reçoit un int, il faut forcer le paramètre en unsigned char sinon dans le cas où les char seraient signés les caractères -128 à -1 posent un problème. Explications ici.
Et pour rendre cela plus propre, avec la proposition de Fvirtman, tu supprimes la ligne 11 et les lignes 21 à 25, et tu ajoutes avant l'accolade finale
int p=0;
for(int i=1;i<26;i++)
if(count[i]>count[p])
p=i;
printf("La lettre la plus présente est %c (%d x)",p+'a',count[p]);
- Edité par edgarjacobs 28 décembre 2021 à 0:22:28
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Si on n'est pas avare de mémoire, on peut faire plus rapide: - #include <stdio.h> #include <ctype.h> int main(void) { unsigned char stringToRead[10001]; fgets(stringToRead, 10001, stdin); int count[256] = { 0 }; for(unsigned char *c = stringToRead; *c; c++) count[tolower(*c)]++; int p = 'a'; for(int i='a'+1; i<='z'; i++) if(count[i] > count[p]) p = i; printf("Le caractère '%c' est le plus fréquent (%d)\n", p, count[p]); return 0; }
Le Tout est souvent plus grand que la somme de ses parties.
Bon au final j'ai fait un mélange de tout ça et ça marche XD merci à vous
Echec sur tests
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
En recherche d'emploi.
En recherche d'emploi.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le Tout est souvent plus grand que la somme de ses parties.