Nombre de mots d'une phrase

Voir le sujet précédent Voir le sujet suivant Aller en bas

Nombre de mots d'une phrase

Message par Napoléon le Sam 5 Jan - 22:52

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.
Code:

    int isLettre(char c) {
      return (c>=65&&c<=90) || c>=97&&c<=122 ||
          c=='à' || c=='é' || c=='è' || c=='ê';
    }
   

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5283
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Nombre de mots d'une phrase

Message par manianis le Sam 5 Jan - 23:59

Cette fois je ne donnerai pas de solutions jusqu'a voir les contributions des autres.

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3666
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Nombre de mots d'une phrase

Message par Napoléon le Dim 6 Jan - 0:11

Bien fait Smile C'est ce que j'allais dire.

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5283
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Nombre de mots d'une phrase

Message par informix le Dim 6 Jan - 18:09

En JAVA, j'ai une solution. On peut la traduire en C++ aisément:

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, Ecole d'ingénieurs
Les passions font vivre l'Homme; sa sagesse le fait seulement durer.
avatar
informix
Nombre Rationnel
Nombre Rationnel

Nombre de messages : 399
Réputation : 4
Points : 3937
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Nombre de mots d'une phrase

Message par manianis le Dim 6 Jan - 22:57

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

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3666
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Nombre de mots d'une phrase

Message par manianis le Dim 6 Jan - 22:58

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 Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3666
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Nombre de mots d'une phrase

Message par methodiX le Dim 6 Jan - 23:30

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.

_________________
Sami - Methodix, tunis
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum
avatar
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4665
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Nombre de mots d'une phrase

Message par methodiX le Dim 6 Jan - 23:34

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 Smile 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 Very Happy

_________________
Sami - Methodix, tunis
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum
avatar
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4665
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Nombre de mots d'une phrase

Message par manianis le Dim 6 Jan - 23:38

Faire une fonction en C/C++ qui retoune le nombre de mots d'un texte donné.
On demande bien le nombre de mots et non pas les mots.

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.
Oui, c'est correct. Mais, la réponse donnée ne répond pas à aucune des questions posées ci-dessus.

- 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 Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3666
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Nombre de mots d'une phrase

Message par manianis le Dim 6 Jan - 23:43

methodiX a écrit:pourtant, je trouve cette solution est un peu plus compliquée que celle postée ci-dessus Smile celle ci ne prend en compte que les chars où isLettre(char) retourne True. Donc, elle ignore bien les autres char.
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 :
Code:
bool estSeparateur(char c)

methodiX a écrit:Ca me plait ce genre de discussion/défi Very Happy
Je suis de votre avis.

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3666
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Nombre de mots d'une phrase

Message par methodiX le Dim 6 Jan - 23:58

à 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;
    }

_________________
Sami - Methodix, tunis
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum
avatar
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4665
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Nombre de mots d'une phrase

Message par manianis le Lun 7 Jan - 0:03

Chokran jazilen king
Bonne adaptation methodiX

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3666
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Nombre de mots d'une phrase

Message par moudhafer le Mar 1 Juin - 19:58

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 Smile
merci

moudhafer
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 58
Age : 28
Localisation : france
Réputation : 0
Points : 2775
Date d'inscription : 26/05/2010

Revenir en haut Aller en bas

Re: Nombre de mots d'une phrase

Message par methodiX le Mar 1 Juin - 23:17

1) je te propose d'utiliser les balises [ code] [/ code]. ça embellit plus ton code source.
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.

_________________
Sami - Methodix, tunis
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum
avatar
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4665
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Nombre de mots d'une phrase

Message par moudhafer le Mer 2 Juin - 0:04

1)okkk merci je savais pas ce truc Wink merci
2)j'ai verifié et je vois que a 99% c'est bon
merciii

moudhafer
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 58
Age : 28
Localisation : france
Réputation : 0
Points : 2775
Date d'inscription : 26/05/2010

Revenir en haut Aller en bas

Re: Nombre de mots d'une phrase

Message par moudhafer le Mar 26 Oct - 8:37

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

moudhafer
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 58
Age : 28
Localisation : france
Réputation : 0
Points : 2775
Date d'inscription : 26/05/2010

Revenir en haut Aller en bas

Re: Nombre de mots d'une phrase

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum