Nombre de mots d'une phrase
5 participants
Forum INFOMATH :: Enseignement de l'informatique :: INFO - Supérieur (Etudiants et Professionnels) :: C/C++
Page 1 sur 1
Nombre de mots d'une phrase
Salut,
Un petit exercice pour ceux qui sont intéressés:
Faire une fonction en C/C++ qui retoune le nombre de mots d'un texte donné. Un mot est une suite de lettres. On suppose qu'on dispose d'une fonction qui vérifie si un caractère est une lettre ou non.
Un petit exercice pour ceux qui sont intéressés:
Faire une fonction en C/C++ qui retoune le nombre de mots d'un texte donné. Un mot est une suite de lettres. On suppose qu'on dispose d'une fonction qui vérifie si un caractère est une lettre ou non.
- Code:
int isLettre(char c) {
return (c>=65&&c<=90) || c>=97&&c<=122 ||
c=='à' || c=='é' || c=='è' || c=='ê';
}
Napoléon- Admin
-
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7875
Date d'inscription : 19/03/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: Nombre de mots d'une phrase
Cette fois je ne donnerai pas de solutions jusqu'a voir les contributions des autres.
manianis- Nombre Réel
-
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6258
Date d'inscription : 11/10/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: Nombre de mots d'une phrase
Bien fait C'est ce que j'allais dire.
Napoléon- Admin
-
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7875
Date d'inscription : 19/03/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: Nombre de mots d'une phrase
En JAVA, j'ai une solution. On peut la traduire en C++ aisément:
Vos commentaires?
- Code:
static public ArrayList<Object> allWords(String text) {
if (text==null || text.length()==0) return null;
ArrayList<Object> all = new ArrayList<Object>();
String word = "";
boolean _begin = false;
int nbr = 0;
for (int i=0;i<text.length();i++) {
if (_begin && !MotAlpha.isLettre(text.charAt(i))) {
_begin = false;
all.add(word);
nbr = nbr + 1;
}
if (!_begin && MotAlpha.isLettre(text.charAt(i))) {
_begin = true;
word = "";
}
if (_begin)
word = word + text.charAt(i);
}
if (_begin) {
all.add(word);
}
return all;
}
Vos commentaires?
informix- Nombre Rationnel
- Nombre de messages : 399
Réputation : 4
Points : 6529
Date d'inscription : 19/03/2007
Feuille de personnage
Capacité linguistique:
(1000/1000)
Re: Nombre de mots d'une phrase
Je crois que la solution la plus simple consiste à sauter les espaces de début et de fin et de compter ensuite le nombre de séparateurs entre les mots : nbSep (tabulations, esapces, retours à la ligne, signes de ponctuation...)
Le nombre de mots doit être égal à : nbSep + 1
Le nombre de mots doit être égal à : nbSep + 1
manianis- Nombre Réel
-
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6258
Date d'inscription : 11/10/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: Nombre de mots d'une phrase
informix a écrit:En JAVA, j'ai une solution. On peut la traduire en C++ aisément:
- Code:
static public ArrayList allWords(String text) {
if (text==null || text.length()==0) return null;
ArrayList all = new ArrayList();
String word = "";
boolean _begin = false;
int nbr = 0;
for (int i=0;i
if (_begin && !MotAlpha.isLettre(text.charAt(i))) {
_begin = false;
all.add(word);
nbr = nbr + 1;
}
if (!_begin && MotAlpha.isLettre(text.charAt(i))) {
_begin = true;
word = "";
}
if (_begin)
word = word + text.charAt(i);
}
if (_begin) {
all.add(word);
}
return all;
}
Vos commentaires?
Votre solution me parait bonne. Bien que je trouve que l'utilisation des Templates n'est pas justifiée dans ce cas.
manianis- Nombre Réel
-
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6258
Date d'inscription : 11/10/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: Nombre de mots d'une phrase
le nombre de mots n'est pas connu d'avance. Donc, le recours aux tableaux dynamiques est justifié. Ceci est dit, ArrayList implémente bien un tableau dynamique.
De toute façon, l'idéal à mon avis c'est de retourner une liste chainée.
De toute façon, l'idéal à mon avis c'est de retourner une liste chainée.
methodiX- Admin
-
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 7257
Date d'inscription : 22/03/2007
Feuille de personnage
Capacité linguistique:
(1000/1000)
Re: Nombre de mots d'une phrase
manianis a écrit:Je crois que la solution la plus simple consiste à sauter les espaces de début et de fin et de compter ensuite le nombre de séparateurs entre les mots : nbSep (tabulations, esapces, retours à la ligne, signes de ponctuation...)
Le nombre de mots doit être égal à : nbSep + 1
pourtant, je trouve cette solution un peu plus compliquée que celle postée ci-dessus celle ne prend en compte que les char où isLettre(char) retourne True. Donc, elle ignore bien les autres char.
Ca me plait ce genre de discussion/défi
methodiX- Admin
-
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 7257
Date d'inscription : 22/03/2007
Feuille de personnage
Capacité linguistique:
(1000/1000)
Re: Nombre de mots d'une phrase
On demande bien le nombre de mots et non pas les mots.Faire une fonction en C/C++ qui retoune le nombre de mots d'un texte donné.
Oui, c'est correct. Mais, la réponse donnée ne répond pas à aucune des questions posées ci-dessus.methodiX a écrit:le nombre de mots n'est pas connu d'avance. Donc, le recours aux
tableaux dynamiques est justifié. Ceci est dit, ArrayList implémente
bien un tableau dynamique.
De toute façon, l'idéal à mon avis c'est de retourner une liste chainée.
- fonction en C/C++ (car on est dans la rubrique C++)
- nombre de mots (pour se conformer à l'énoncé)
Cependant, la réponse reste acceptable. Personnellement je lui donne 10/10. Elle est bien claire et trés bien rédigée.
manianis- Nombre Réel
-
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6258
Date d'inscription : 11/10/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: Nombre de mots d'une phrase
Je crois que Nabil ne voulait pas nous limiter à isLettre. Mais il donnait un exemple comment on pourrait faire. Il est possible d'ajouter une autre fonction :methodiX a écrit:pourtant, je trouve cette solution est un peu plus compliquée que celle postée ci-dessus celle ci ne prend en compte que les chars où isLettre(char) retourne True. Donc, elle ignore bien les autres char.
- Code:
bool estSeparateur(char c)
Je suis de votre avis.methodiX a écrit:Ca me plait ce genre de discussion/défi
manianis- Nombre Réel
-
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6258
Date d'inscription : 11/10/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: Nombre de mots d'une phrase
à la manière d'informix une méthode JAVA qui détermine uniquement le nombre de mots:
- Code:
static public int wordsCount(String text) {
if (text==null || text.length()==0) return 0;
int nbr = 0;
boolean _begin = false;
for (int i=0;i < text.length() ; i++) {
if (_begin && !MotAlpha.isLettre(text.charAt(i))) {
_begin = false;
nbr = nbr + 1;
}
if (!_begin && MotAlpha.isLettre(text.charAt(i)))
_begin = true;
}
if (_begin) ++nbr;
return nbr;
}
methodiX- Admin
-
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 7257
Date d'inscription : 22/03/2007
Feuille de personnage
Capacité linguistique:
(1000/1000)
Re: Nombre de mots d'une phrase
Chokran jazilen
Bonne adaptation methodiX
Bonne adaptation methodiX
manianis- Nombre Réel
-
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6258
Date d'inscription : 11/10/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: Nombre de mots d'une phrase
j'ai une idée
les mots sont séparés par des espaces(une ou plusieurs)et par des virgules ou des points.supposons avoir une fonction qui retourne vrai si une lettre est un séparateur,la fin d'une chaine en C est la lettre '\0'.la fonction remplit un tableau par les mots détectés.
char **tab;
char *tmp;
tab=malloc(sizeof(char*)*5);
j=0;
i=0;
nb=0;
while(ch[i]!='\0')//c'est utile dans le cas oû on a plus des espaces a la fin
{
while(separateur(ch[i])){i++;}
j=i;
while(islettre(ch[j])){j++;}
nb++;//on a identifié un mot
if(ch[j]!='\0')
{ch [j]='\0';tmp=strcpy(ch+i);if(nb%5)==0){tab=realloc(tab,sizeof(char*)*nb+5)};tab[nb]=tmp;}
//strcpy copie caractere par caractere jusqu'a trouver le \0,et allocation du grand tab par blocde 5
else{tmp=strcpy(ch+i);break;}//on fait un break car on est arrivé a la fin naturelle de la chaine identifiée par le \0.
i=j+1;
}//fin du while
je suis pas sure a 100%(je suis en metro :p) j'attends vos critiques s'il y en a des erreurs
merci
les mots sont séparés par des espaces(une ou plusieurs)et par des virgules ou des points.supposons avoir une fonction qui retourne vrai si une lettre est un séparateur,la fin d'une chaine en C est la lettre '\0'.la fonction remplit un tableau par les mots détectés.
char **tab;
char *tmp;
tab=malloc(sizeof(char*)*5);
j=0;
i=0;
nb=0;
while(ch[i]!='\0')//c'est utile dans le cas oû on a plus des espaces a la fin
{
while(separateur(ch[i])){i++;}
j=i;
while(islettre(ch[j])){j++;}
nb++;//on a identifié un mot
if(ch[j]!='\0')
{ch [j]='\0';tmp=strcpy(ch+i);if(nb%5)==0){tab=realloc(tab,sizeof(char*)*nb+5)};tab[nb]=tmp;}
//strcpy copie caractere par caractere jusqu'a trouver le \0,et allocation du grand tab par blocde 5
else{tmp=strcpy(ch+i);break;}//on fait un break car on est arrivé a la fin naturelle de la chaine identifiée par le \0.
i=j+1;
}//fin du while
je suis pas sure a 100%(je suis en metro :p) j'attends vos critiques s'il y en a des erreurs
merci
moudhafer- Entier Naturel
-
Nombre de messages : 58
Age : 35
Localisation : france
Réputation : 0
Points : 5367
Date d'inscription : 26/05/2010
Re: Nombre de mots d'une phrase
1) je te propose d'utiliser les balises [ code] [/ code]. ça embellit plus ton code source.
2) à première vue, c'est bon.
- Code:
char **tab;
char *tmp;
tab=malloc(sizeof(char*)*5);
j=0;
i=0;
nb=0;
while(ch[i]!='\0')//c'est
utile dans le cas oû on a plus des espaces a la fin
2) à première vue, c'est bon.
methodiX- Admin
-
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 7257
Date d'inscription : 22/03/2007
Feuille de personnage
Capacité linguistique:
(1000/1000)
Re: Nombre de mots d'une phrase
1)okkk merci je savais pas ce truc merci
2)j'ai verifié et je vois que a 99% c'est bon
merciii
2)j'ai verifié et je vois que a 99% c'est bon
merciii
moudhafer- Entier Naturel
-
Nombre de messages : 58
Age : 35
Localisation : france
Réputation : 0
Points : 5367
Date d'inscription : 26/05/2010
Re: Nombre de mots d'une phrase
salut
a propos j'ai verifié vos solutions,j'ai remarqué que vos algo ne gerent pas le cas ou on a plusieurs espaces entre 2mots!!
Merci
a propos j'ai verifié vos solutions,j'ai remarqué que vos algo ne gerent pas le cas ou on a plusieurs espaces entre 2mots!!
Merci
moudhafer- Entier Naturel
-
Nombre de messages : 58
Age : 35
Localisation : france
Réputation : 0
Points : 5367
Date d'inscription : 26/05/2010
Sujets similaires
» Nombre de Décompositions d'un nombre
» Corriger cette phrase...
» Corriger cette phrase (2) ...
» Exercice (bac pratique): Renverser une phrase
» des mots ... des sens ...
» Corriger cette phrase...
» Corriger cette phrase (2) ...
» Exercice (bac pratique): Renverser une phrase
» des mots ... des sens ...
Forum INFOMATH :: Enseignement de l'informatique :: INFO - Supérieur (Etudiants et Professionnels) :: C/C++
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum