Probleme difficile en C
Bonsoir , voici un algorithme en français , que je dois coder en C :
Je parcours la chaine de caractères , arrivé au 1er mot je compte les lettres du mot , et j'incrémente la case du tableau correspondante .
pour compter les mots en C , c'est comme ceci :
if ( ( a = getchar() ) != EOF )
etat = DEHORS;
else if ( etat = DEHORS )
{
etat = DEDANS;
++nm;
}
le nm est la variable qui me compte les nombre de mots , mais pour compter les lettres de chaque mot , est ce que je dois déclarer une autre variable ... quelquun a une piste? pitié pas de code tout fait , juste une piste svp , merci .
Je parcours la chaine de caractères , arrivé au 1er mot je compte les lettres du mot , et j'incrémente la case du tableau correspondante .
pour compter les mots en C , c'est comme ceci :
if ( ( a = getchar() ) != EOF )
etat = DEHORS;
else if ( etat = DEHORS )
{
etat = DEDANS;
++nm;
}
le nm est la variable qui me compte les nombre de mots , mais pour compter les lettres de chaque mot , est ce que je dois déclarer une autre variable ... quelquun a une piste? pitié pas de code tout fait , juste une piste svp , merci .
6 réponses
en fait , pour compter les lettres de chaque mot , je pensais déclarer une variable nl au début , et l'incrémenter à la fin , comme ceci :
comme çà , à chaque boucle on incrémente , qu'en dites vous?
nl = 0; while ( ( a = getchar() ) != EOF ) { if ( a == ' ' || a == '\n' || a == '\t' ) if ( ( a = getchar() ) != EOF ) etat = DEHORS; else if ( etat = DEHORS ) { etat = DEDANS; } ++nl;
comme çà , à chaque boucle on incrémente , qu'en dites vous?
bien messieurs , alors reprenons , je dois simplement utiliser les fonctions getchar et putchar ( et printf ) mais çà çà sera plus tard , pour l'instant moi je veux un code qui quand il parcours une chaine ( une phrase ) , compte le nombre de mots , et le nombre de lettres de chaque mot , donc je sais compter le nombre de mots , c'est comme ceci :
while ( ( a = getchar() ) != EOF )
{
if ( a == ' ' || a == '\n' || a == '\t' )
etat = DEHORS;
else if ( etat = DEHORS )
{
etat = DEDANS;
}
donc çà c'est l'algo pour compter le nombre de mot , mais çà ne m'interesse pas , moi ne je cherche pas à connaitre le nombre de mots , mais à connaitre le nombre de lettres de chaque mot en parcourant la chaine , parce que le but de l'exercice c'est de coder un programme qui affiche un histogramme de la taille des mots en entrée , donc si par exemple j'ai cette phrase :
salut mon gros lapin , alors çà va avec les lapines?
je dois avoir çà comme résultat à l'écran ( le caractère '_' est utilisé pour dessiner l'histogramme ) :
1: /* 0 mot de 1 lettre */
2: __ /* 2 mots de 2 lettres */
3: __ /* 2 mots de 3 lettres */
4: ___ /* 3 mots de 4 lettres */
5: _____
6:
7:
..........
donc moi pour le moment je veux uniquement que vous me donniez un indice pour compter les lettres de chaque mot , je pars de ce code :
while ( ( a = getchar() ) != EOF )
{
if ( a == ' ' || a == '\n' || a == '\t' )
etat = DEHORS;
else if ( etat = DEHORS )
{
etat = DEDANS;
}
je pensais déclarer nl = 0; avant la condition , et l'incrémenter après la boucle , mais çà n'a pas de sens , donc pour compter les lettres de chaque mot , suis je obligé d'utiliser un tableau merci?
while ( ( a = getchar() ) != EOF )
{
if ( a == ' ' || a == '\n' || a == '\t' )
etat = DEHORS;
else if ( etat = DEHORS )
{
etat = DEDANS;
}
donc çà c'est l'algo pour compter le nombre de mot , mais çà ne m'interesse pas , moi ne je cherche pas à connaitre le nombre de mots , mais à connaitre le nombre de lettres de chaque mot en parcourant la chaine , parce que le but de l'exercice c'est de coder un programme qui affiche un histogramme de la taille des mots en entrée , donc si par exemple j'ai cette phrase :
salut mon gros lapin , alors çà va avec les lapines?
je dois avoir çà comme résultat à l'écran ( le caractère '_' est utilisé pour dessiner l'histogramme ) :
1: /* 0 mot de 1 lettre */
2: __ /* 2 mots de 2 lettres */
3: __ /* 2 mots de 3 lettres */
4: ___ /* 3 mots de 4 lettres */
5: _____
6:
7:
..........
donc moi pour le moment je veux uniquement que vous me donniez un indice pour compter les lettres de chaque mot , je pars de ce code :
while ( ( a = getchar() ) != EOF )
{
if ( a == ' ' || a == '\n' || a == '\t' )
etat = DEHORS;
else if ( etat = DEHORS )
{
etat = DEDANS;
}
je pensais déclarer nl = 0; avant la condition , et l'incrémenter après la boucle , mais çà n'a pas de sens , donc pour compter les lettres de chaque mot , suis je obligé d'utiliser un tableau merci?
Je pense qu'un truc comme ça devrait t'aider.
tu dois remettre ta variable nl à 0 si
sinon tu l'incrementes +1
Si tu veux regardes la partie de code modifier qui suit
stef
tu dois remettre ta variable nl à 0 si
if ( a == ' ' || a == '\n' || a == '\t' )
sinon tu l'incrementes +1
Si tu veux regardes la partie de code modifier qui suit
nl=0 while ( ( a = getchar() ) != EOF ) { if ( a == ' ' || a == '\n' || a == '\t' ) nl=0 else nl++; tab[nl]++; }
stef
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
est ce que si c'est la variable a qui prend les caractères en entrée que j'incrémente çà sera bon , :
int a = 0;
while ( ( a = getchar() ) != EOF )
{
if ( a == ' ' || a == '\n' || a == '\t' )
etat = DEHORS;
else if ( etat = DEHORS )
{
etat = DEDANS;
++a;
}
est ce que ce code me comptera les nombre de lettres par mot ?
merci
int a = 0;
while ( ( a = getchar() ) != EOF )
{
if ( a == ' ' || a == '\n' || a == '\t' )
etat = DEHORS;
else if ( etat = DEHORS )
{
etat = DEDANS;
++a;
}
est ce que ce code me comptera les nombre de lettres par mot ?
merci
Euh je sais pas si ça doit être impérativement fait en C, mais en C++ en utilisant l'objet std::string et intelligement les méthodes find() et length() c'est immédiat.
http://www.sgi.com/tech/stl/basic_string.html
Bonne chance
http://www.sgi.com/tech/stl/basic_string.html
Bonne chance
Ensuite tu testes:
cette condition te permet de savoir si tu as atteinds la fin d'un mot. C'est donc a ce moment la que tu dois incrementer la variable qui te sers a compter le nombre de mots que tu as dans ta phrase.
Pour ce qui est du comptage de chaque lettres du mot, je ne suis pas sur davoir compris ce que tu veux faire?
soit tu veux compter chaque lettre et donc tu incrementes "nl" sauf pour ta condition
soit tu dois compter chaque lettre equivalentes (3 "a", 5 "b"....) alors il te faut un tableau de 26 cases pour les 26 lettres de l'alphabet et tu dois incrementer chaque cases du tableau correspondant a la lettre que tu traites.
Stef