Car_plus_freq

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 477 fois - Téléchargée 27 fois

Contenu du snippet

ce programe retourne le caractère le plus frequent dans une chaine de caractère

Source / Exemple :


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
char fct05(char *);
main(){
char *s,c;    
s=(char *) malloc (100 *sizeof (char));
printf("\n Entrer une chaine de caracteres : ");
scanf("%s", s); 
c=fct05(s);      
printf("\n  le caractere le plus frequent est : %c\n",c); 
system("pause");   
}       
char fct05(char *s )
{
      
             char c;
 	short int i=0, j=0, n=0,m=0;
    while(*(s+i))
	{   
		n=0;
		j=i;
              while(*(s+j))
              
              {
                  if(*(s+j)==*(s+i))
                       n++;
				   j++;
              }
			 
              if(n>m)
              {
                   c=*(s+i);
                   m=n;
              }
              i++;
	}
    return c;
	
}

Conclusion :


je suis ahmed bouatmane je passe le bonjour a tous ce qui aime la programmation et developpement et merci pour codes-source le meilleure site d'informatique.
Ajouter un commentaire Commentaires
Messages postés
173
Date d'inscription
jeudi 20 décembre 2001
Statut
Membre
Dernière intervention
22 août 2008

tu pensais à quelquechose dans ce genre ?
char __stdcall LePlusFrequent(char *psz)
{
int tab[256];
char c;

char best_char = 0;
if(!(c = psz[0])) return 0;
memset(tab, 0, 256 * sizeof(int));

do
{
if (tab [best_char] < tab[c])
best_char = c;
tab[c]++;
} while(c = *++psz); // un seul parcours de la chaine

return best_char;
}

Effectivement pour les chaines de plus de 256 caracteres dans cette version on economise un peu de mémoire (mais bon à ce niveau la ca devient du radinisme d'economiser...)
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
enfin, si la chaine a tester fais moins de 256 caractères...
sinon, on fais plus de comparaisons que dans la deuxième boucle (elle a cet avantage de faire 256 itérations, quoi qu'il arrive ^^
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Ne pas hésiter à en mettre une autre version, on retiendra la meilleure.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
on pourrais même mémoriser le max dans la boucle numéro non ?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Surement de très belles phrases que tu écris mais inutile de les parcourir autant.

char __stdcall LePlusFrequent(BYTE *psz)
{
DWORD tab[256], r, v;
BYTE c;
if(!(c = psz[0])) return 0;
memset(tab, 0, 256 * sizeof(DWORD));
do {
tab[c]++;
} while(c = *++psz); // 1 SEUL PARCOURS DE LA CHAINE
r = 254;
v = tab[255];
c = 255;
do {
if(tab[r] > v) {
v = tab[r];
c = (BYTE) r;
}
} while(--r); // 1 SEUL PARCOURS DU TABLEAU
return (char) c;
}

Dès que ta chaine fait 30 caractères ta méthode est plus longue que celle au dessus et l'écart grandira très très vite.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.