Occurence d'un caractère dans une chaine

Salut !

Je souhaite récupérer le caractère le plus redondant dans une chaine de caractère. J’ai bien une idée mais je n’arrive pas à tisser mon code autour :??:
Je procede de la maniere suivante :
J’ai 3 tableaux, un qui contient a…z, le deuxieme A…Z et le troisième contient ma chaine de caractères.

Je n’arrive pas a trouver l’algo qui pourrait me sortir le caractere qui revient le plus souvent.
Faut-il que je teste pour chaque case de mon troisieme tableau mes 2 autres?
Merci de vos suggestions :wink:

en c (ça doit etre facile a converti
[cpp]
char buffer[256]=“dadzzezzeezezfez”;
int alphabet[26];

for (i=0;i<26;i++) alphabet[i]=0;

for(i=0; i<strlen(buffer);i++)
alphabet[(int)(buffer[i]-‘a’)]++;
[/cpp]

[cpp]char tabMin[] = new char[26];
char tabMaj[] = new char[26];
char tabStr[] = new char[s.length()];
int tabCountMin[] = new int[26];
int tabCountMaj[] = new int[26];

tabMin[0] = ‘a’;
tabMaj[0] = ‘A’;
tabStr[0] = ’ ';
tabCountMin[0] = 0;
tabCountMaj[0] = 0;

// Ici on rempli les 2 tableaux tabMin de b…z et tabMaj de B…Z
for (int i = 1; i < 26; i++) {
tabMin[i] = (char)(‘a’ + i);
tabMaj[i] = (char)(‘A’ + i);
}

// On rempli le tableau tabStr avec chaque caractère de la chaine
for (int i = 0; i < s.length(); i++)
tabStr[i] = s.charAt(i);

// Ici, pour chaque lettre de l’alphabet, on va noter dans un tabCount le nombre d’occurence de
// chaque caractere de la chaine (minuscule et majuscule)
for (int i = 0; i < 26; i++) {
for (int j = 0; j < s.length(); j++) {
if (tabMin[i] == tabStr[j])
tabCountMin[i] += 1;
if (tabMaj[i] == tabStr[j])
tabCountMaj[i] += 1;
}
}

// On regarde quelle lettre revient le plus fréquement (on est limite a une lettre dans cette config)
int maxMin = 0;
for (int i = 0; i < tabCountMin.length; i++) {
if (tabCountMin[i] > maxMin) { maxMin = tabCountMin[i];}
}
int maxMaj = 0;
for (int i = 0; i < tabCountMaj.length; i++) {
if (tabCountMaj[i] > maxMaj) { maxMaj = tabCountMaj[i];}
}[/cpp]

J’ai fait ca, c’est un peu lourd mais ca me permet de déterminer toutes les occurences de chaque caractère de la chaine.

en c (ça doit etre facile a converti
[cpp]
char buffer[256]=“dadzzezzeezezfez”;
int ascii[256];

for (i=0;i<256;i++) ascii[i]=0;

for(i=0; i<strlen(buffer);i++)
ascii[(int)buffer[i]]++;
[/cpp]

heu moi aussi … mais c moins lourd lol

Ca doit être quelque chose comme ça (La reconversion byte->int devrait rétablir les valeurs 0…255)

byte[] buffer = "dadzzezzeezezfez".getBytes();
byte[] ascii = new byte[256];

for (int i=0 ; i<buffer.length ; i++) {
    ascii[(int)buffer[i]]++;
}

Je vais tester ca ! Je n’aurais jamais pensé à cela, merci !!

sauf que si t’as plus de 255 caractere identique ça va pas marcher…

J’ai été un peu rapide à traduire ton truc :wink:

int[] ascii = new int[256];