Chaine de caractère

Résolu
istabandal -  
 istabandal -
Bonjour,

j'ai un petit problème avec mon code. je veux afficher le nombre de fois que chaque caratère apparait dans une phrase mais lors de l'appelle ça me donne plusieurs chiffre et je ne parviens pas à trouver l'erreur!

voici le code ci-dessous:

#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void compte(char ch[])
{
int i,j,z,cpt,trouve;

for(i=0 ; ch[i]!='\0';i++)
{
for(z=0; z<i; z++)
if(ch[i]==ch[z])
{
trouve==1; break;
}
if(trouve==0)
{
for(j=0; ch[j]!='\0'; i++)
{
if(ch[i]==ch[j])
{
cpt++;
}

}

}
} printf("%c apparait %d fois dans la chaine",ch[i],cpt);

}
int main (void)
{
char ch1[50]="";
int k,l,m,nbr,boul;
printf("entrer une chaine de caratere: ");
gets(ch1);
compte(ch1);

return 0;
}

A voir également:

3 réponses

yvoyuuta Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
Salut, tu dois initialiser ton cpt a 0 (cpt=0) après la premier boucle.
0
yvoyuuta Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
Bref il y a plusieurs erreurs donc voila le code juste et compare le avec le tien :

#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void compte(char ch[])
{
int i,j,z,cpt=0,trouve=0;
char a='\0';

for(i=0 ; ch[i]!=a;i++)
{
trouve=0;
cpt=0;
for(z=0; z<i; z++)
{
if(ch[i]==ch[z])
{
trouve=1; break;
}
}
if(trouve==0)
{
for(j=0; ch[j]!=a; j++)
{
if(ch[i]==ch[j])
{
cpt++;
}

}
printf("%c apparait %d fois dans la chaine\n",ch[i],cpt);
}
}

}
int main (void)
{
char ch1[50]="";
int k,l,m,nbr,boul;
printf("entrer une chaine de caratere: ");
gets(ch1);
compte(ch1);

return 0;
}
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

Merci pour les prochaines fois d'utiliser la balise "code" qui se trouve à droite du bouton "souligné" avant de poster un code. Sinon ce n'est pas très lisible.

Même remarque, gets() est à proscrire => fgets().
char a='\0'; => C'est moins lisible. Autant mettre directement '\0' dans le code comme fait par istabandal.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

Merci pour les prochaines fois d'utiliser la balise "code" qui se trouve à droite du bouton "souligné" avant de poster un code. Sinon ce n'est pas très lisible.

@istabandal,
gets() est à proscrire => On utilise à la place fgets()
trouve==1; break;
Pour l'affectation, c'est trouve=1; (un seul égal). Le double égal, c'est pour la comparaison.

for(j=0; ch[j]!='\0'; i++)
Tu parles de j, et tu modifies i... Plutôt j++, non ?

Il ne faut pas oublier d'initialier trouve à 0.
Il ne faut réinitialier cpt à 0 lorsque tu passes à un autre caractère?

printf("%c apparait %d fois dans la chaine",ch[i],cpt);
N'oublie pas un fflush(stdout). Ou alors mets un "\n" en fin de printf :
printf("%c apparait %d fois dans la chaine\n",ch[i],cpt);

De plus, il est mal placé. Il faudrait le placer dans le if (trouve==0)

Cdlt,

Google is your friend
0
istabandal
 
merci beaucoup @fiddy
0