IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Compteur de mots


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2019
    Messages : 4
    Points : 6
    Points
    6
    Par défaut Compteur de mots
    Bonjour,

    je débute en javascript et je fais face à un petit problème.

    Je dois écrire une fonction compteMots3(s,sep) qui compte le nombre de mots séparés par les séparateurs contenus dans la chaîne sep.

    NB: Auparavant j'ai du ecrire une fonction compteMots(s) et compteMots2(s) permettent de compter le nombre de mots séparés par un seul espace dans une chaîne s et permettant de compter le nombre de mots séparés par un espace au moins contenu dans la chaîne s.

    Voici la premiere compteMots(s)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function compteMots(s){
      var words = s.split(' ');
      return words.length;
    }
    La seconde compteMots2(s)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function compteMots2(s){
      var i =0;
      var compte =0;
      while(i<s.length){
        if(s[i]==' '){
          i++;
        }
        else{
          compte += 1;
          while(s[i]!= ' '){
            i++;
          }
        }
     
      }
      return compte;
    }
    Pour ces deux ci-dessus, elles fonctionnent et je bloque sur la troisième compteMots3(s,sep).
    Voici ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function compteMots3(s,sep){
      var j;
      var str;
      var k;
      for(j=0; j<sep.length;j++){
        str = s.split(sep[j]);
        s = "";
        for(k =0;k<str.length;k++){
          s += str[k];
        str = "";
        }
     
      }
      return compteMots2(s);
    }
    Voici les exemples donnés par le prof :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    compteMots('la maman de Colette et de Daniel'); // 7
     
    compteMots2(' la maman    de Colette et de   Daniel  '); // 7
     
    compteMots3('Ceci, mais oui, est une phrase !', ' !,') // 6
    Si vous avez des pistes à me donner ou des fonction que je ne connais pas qui pourraient m’être utiles.

    Merci d'avance !

  2. #2
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    function compteMots(text,sep)
      {
      sep = sep || ' '
      let count  = 0
        , onWord = false
      for (const c of text)
        {
        if (sep.includes(c))
          { onWord = false }
        else if (!onWord) 
          {
          onWord = true
          count++
          }
        }
      return count
      }
    console.log('1-', compteMots('la maman de Colette et de Daniel')   )        // 7
    console.log('2-', compteMots(' la maman de Colette et de Daniel ')   )      // 7
    console.log('3-', compteMots('Ceci, mais oui, est une phrase !', ' !,')   ) // 6
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2019
    Messages : 4
    Points : 6
    Points
    6
    Par défaut
    En essayant le code j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    compteMots3('Ceci, mais oui, est une phrase !','!,')
    /*
    3
    */
    et non 6 comme il se devrait alors que j'ai repris votre code.

    Savez-vous pourquoi ?

  4. #4
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    Donc vous considérez que j'ai triché sur le résultat ?
    ben non, c'est parce que ce n'est pas du tout mon code:
    ==> le second argument est ' !,' et non '!,'.

    si vous recopiez mon code alors faites le proprement svp.
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    sinon ça peut se faire avec une regexp ^^
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2019
    Messages : 4
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par psychadelic Voir le message
    ...
    J'ai juste renommé en compteMots3 car j'en utilise deux autres dans l' exo....

  7. #7
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut


    La solution de @psychadelic est bonne et elle fonctionne très bien (faites attention à l'écriture du second paramètre de la fonction) !

    Petite amélioration (contenu du second paramètre) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    function compteMots(text, sep = ` ,;.!-_`) {
        let 
            count = 0,
            onWord = false
     
        for (const c of text) {            
            if (sep.includes(c)) {
                onWord = false
            } else if (!onWord) {
                onWord = true
                count++
            }
        }
     
        return count
    }
     
    console.log('4 : ', compteMots(`Ceci, mais oui, c'est une phrase ! Et celle-ci en est une autre. Daniel_Hagnoul`)) // 15 (celle-ci compte pour 2)

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Compteur de mots en JavaScript
    Par Alexcontact dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/08/2015, 16h10
  2. un compteur de mots sur CKeditor
    Par shelko dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/10/2012, 09h05
  3. [Débutant] Compteur de mots
    Par olivier1209 dans le forum Langage
    Réponses: 1
    Dernier message: 27/02/2010, 23h40
  4. compteur de mots pour traitement de texte
    Par kimz dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 22/09/2008, 16h12
  5. [VBA-W]Un compteur de mots dans Word
    Par QAPi dans le forum VBA Word
    Réponses: 3
    Dernier message: 30/03/2006, 13h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo