Nombre de mots et phrases d'une chaine en C [Résolu/Fermé]

Signaler
Messages postés
8
Date d'inscription
mardi 25 décembre 2007
Statut
Membre
Dernière intervention
2 juin 2009
-
 no one -
Bonjour,
Je suis supposée faire programme qui permet de déterminer le nombre de caractères, de mots et de phrases dans un texte saisie, j'ai fait le programme suivant ça ne marche que pour le nombre de caractère:

#include <stdio.h>
#include <conio.h>
#include <string.h>
int main()
{
char txt[5000];
int nbc,j,i;
printf("Entrez votre texte:\n");
gets(txt);


nbc=strlen(txt);

printf("votre chaine de caractere a une longueur de %d caracteres\n",nbc);



j= 0;

while(txt[j]== ' ');
{
j++;
}

printf("votre chaine de caractere contient %d mot(s)\n",j);

i= 0;

while(txt[i]== '.');
{
i++;
}

printf("votre chaine de caractere contient %d phrase(s)\n",i);
return 0;
}

Si quelqu'un peut me dire où est l'erreur, sachant que j'avais essayé la bouble while pour calculer le nombre de caractère avec la condition txt[k]=='\0' et ça a marché.
Merci d'avance.
A voir également:

4 réponses

Messages postés
191
Date d'inscription
vendredi 19 mai 2006
Statut
Membre
Dernière intervention
21 juillet 2010
36
int nbMots = 0;
int nbPhrases = 0;
j= 0;

while(j<strlen(txt));
{
if(txt[j] == ' ') ++nbMots;
j++;
}

printf("votre chaine de caractere contient %d mot(s)\n",nbMots);

j= 0;

while(j<strlen(txt));
{
if(txt[j] == '.') ++nbPhrases;
j++;
}

printf("votre chaine de caractere contient %d phrase(s)\n",nbPhrases);
return 0;
}

ou bien dans une seule boucle
int nbMots = 0;
int nbPhrases = 0;
j= 0;

while(j<strlen(txt));
{
if(txt[j] == ' ') ++nbMots;
if(txt[j] == '.') ++nbPhrases;
j++;
}
printf("votre chaine de caractere contient %d mot(s)\n",nbMots);
printf("votre chaine de caractere contient %d phrase(s)\n",nbPhrases);
Messages postés
8
Date d'inscription
mardi 25 décembre 2007
Statut
Membre
Dernière intervention
2 juin 2009
1
Merci pour ton aide, mais je pense qu'il y a un problème au niveau de la boucle while parce lors de l'exécution ça se bloque mais j ai trouvé une autre méthode utilisant une boucle for et la condition avec if:

#include <stdio.h>
#include<stdio.h>
#include <conio.h>
#include <string.h>
int main()
{
char txt[5000];
int nbc,j,i,k;
int nbmots=0
int nbphrases=0;
printf("Entrez votre texte:\n");
gets(txt);


nbc=strlen(txt);

printf("votre chaine de caractere a une longueur de %d caracteres\n",nbc);


j=0;

for (i=0;i<nbc;i++)

if ((txt[i] == ' ')||(txt[i] == '.')||(txt[i] == ',')||(txt[i] == ';')||(txt[i] == '!')||(txt[i] == '?')||(txt[i] == '-')||(txt[i] == '_'))
nbmots++;
printf("Le nombre de mots est de : %d\n",nbmots);



for(k=0;k<nbc;k++)
if((txt[k]=='.')||(txt[k] == '!')||(txt[k] == '?'))
nbPhrases++;


printf("votre chaine de caractere contient %d phrase(s)\n",nbPhrases);
return 0;
}
desole ! ms si l'utilisateur a tapé plusieur esace ! le programme va compte une space comme une mot ! est plus que sa , les code qui vous ecrivez sur les nombres de mot est fausse ..
Messages postés
8
Date d'inscription
mardi 25 décembre 2007
Statut
Membre
Dernière intervention
2 juin 2009
1
Moi non plus j'avais pas fait attention au point virgule, maintenant ça marche très bien.
Merci beaucoup :-)
Messages postés
191
Date d'inscription
vendredi 19 mai 2006
Statut
Membre
Dernière intervention
21 juillet 2010
36
re yeuxdelynx
j'ai fait une petite gaffe toute à l'heure en t'envoyant le code
while(j<strlen(txt));<--- Erreur (C'est une boucle infinie)
{
if(txt[j] == ' ') ++nbMots;
j++;
}
aussi
while(j<strlen(txt)); <-- Erreur (Boucle infinie)
{
if(txt[j] == '.') ++nbPhrases;
j++;
}
faut juste enlever les ;
sinon tant mieux que ça marche pour toi :-)
mais juste pour savoir elle est ou l'erreur