Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fonction qui compte le nombre de mots

Fonction qui compte le nombre de mots d'une chaine

11 juin 2013 à 16:18:43

J'essaye d'écrire une fonction qui compte le nombre de mots d'une chaîne de caractères donnée en paramètre sachant que deux mots sont séparés par un ou plusieurs espaces.

j'ai fait ça mais ça ne marche pas à tout les coup et je ne sais pas d'où vient le problème. Un petit coup de pouce please

void motChaine( char *ch)
{
    int i=0;
    int cpt=0;
    while (ch[i]!='\0')
    {

        if (ch[i]==' '){
            while(ch[i]==' ' && ch[i]!='\0'){
                i++;
                if(ch[i]!=' '){cpt++;}
            }
        }
        i++;
    }
    printf("Le nombre de mot(s) est de: %d\n",cpt);
}

  • Partager sur Facebook
  • Partager sur Twitter
Mon petit Blog chéri // Mon adorable petit Twitter tout mimi
11 juin 2013 à 16:33:23

Bonjour

tant que le texte n'est pas fini
    si il y a un espace
       compteur++
       tant qu'il y a des espace
          i++
       fin tant que
    sinon
      i++
    fin si
fin tant que    

/!\ ca ne gere pas s'il y a des espaces à la fin, ni au debut ou si il y a qu'un seul mot

tant qu'il y a des espaces
   i++
fin tant que
si c'est pas la fin du fichier
  compteur++
fin si
tant que mon fichier est pas fini
   si il y a un espace
      tant qu'il y a un espace
         i++
      fin tant que
      si c'est pas la fin du fichier
        compteur++
      sinon
        return compteur
      fin si
   fin si
   i++
fin tant que
return compteur

La je pense que ca marche

-
Edité par twx 11 juin 2013 à 16:43:55

  • Partager sur Facebook
  • Partager sur Twitter
11 juin 2013 à 16:58:05

Merci à toi je vais implémenter et tester

-
Edité par s4ngim3d 11 juin 2013 à 16:58:24

  • Partager sur Facebook
  • Partager sur Twitter
Mon petit Blog chéri // Mon adorable petit Twitter tout mimi
11 juin 2013 à 18:16:19

Bonjour,

Il y a, je crois, une autre façon de l'envisager :

Tu créer un compteur.

Tu parcours ta chaine de caractère.

Si ton caractère est n'est pas blanc (espace ou tabulation) et que le suivant lui est blanc alors tu incrémente ton compteur.

Edit : ou que le suivant est '\0'

-
Edité par Masta_π 11 juin 2013 à 18:45:53

  • Partager sur Facebook
  • Partager sur Twitter
parce que j'étais root toute la sainte journée, je n'ai pas vu le doute en moi s’immiscer ...
21 septembre 2013 à 10:51:04

Merci à toi Masta_pi
  • Partager sur Facebook
  • Partager sur Twitter
Mon petit Blog chéri // Mon adorable petit Twitter tout mimi
21 septembre 2013 à 16:07:49

Tu peux utiliser la fonction sscanf() si tes mots sont séparés pas des espaces.

( 'espaces' au sens de la fonction isspace() )

#include <stdio.h>

int compte_mots(const char *chaine)
{
  char tampon[64];
  int compteur = 0, taille = 0;

  if(chaine)
    for(; sscanf(chaine += taille, "%63s%n", tampon, &taille) == 1; compteur++)
      ;

  return compteur;
}

int main(void)
{
  const char chaine[] = "Une chaine de cinq mots";

  puts(chaine);
  printf("Nombre de mot(s) : %d\n", compte_mots(chaine));
  return 0;
}



  • Partager sur Facebook
  • Partager sur Twitter
21 septembre 2013 à 20:42:18

Re,

@magma je suis pas sur que l'appel à sscanf est une bonne idée pour si peu

#include <stdio.h>

int     is_sep(char c)
{
  if (c == ' ' || c == '\0' || c == '\t')
    return (0);
  return (-1);
}

int     my_count_word(const char *str)
{
  int   count;
  int   word;

  if (str == NULL)
    return (0);
  word = 0;
  count = 0;
  while (str[count] != '\0')
    {
      if (is_sep(str[count]) && is_sep(str[count + 1]) == 0)
        ++word;
      ++count;
    }
  return (word);
}

int main(void)
{
  const char chaine[] = "Une chaine de cinq mots";

  puts(chaine);
  printf("Nombre de mot(s) : %d\n", my_count_word(chaine));
  return 0;
}

Me paraît plus intéressant car plus modulable (on pourrait reprendre la même structure pour compter le nombre de phrases)...
Ça fait plaisir de voir que j'ai pas parler dans le vent...

-
Edité par Masta_π 21 septembre 2013 à 20:43:24

  • Partager sur Facebook
  • Partager sur Twitter
parce que j'étais root toute la sainte journée, je n'ai pas vu le doute en moi s’immiscer ...
20 mai 2018 à 14:41:22

comment on peut Ecrire un programme qui permet de compter le nombre de mots d'une phrase en c#
  • Partager sur Facebook
  • Partager sur Twitter
20 mai 2018 à 15:55:23

On pose la question sur le bon forum, et on le fait poliment.

WilliamMinani a écrit:

comment on peut Ecrire un programme qui permet de compter le nombre de mots d'une phrase en c#



-
Edité par edgarjacobs 20 mai 2018 à 15:56:39

  • Partager sur Facebook
  • Partager sur Twitter

On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

20 mai 2018 à 16:00:20

Bonjour,

Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

Pour plus d'informations, nous vous invitons à lire les règles générales du forum

Déterrage

Citation des règles générales du forum :

Avant de poster, demandez-vous si ce que vous allez dire apporte quelque chose au sujet. Si votre message n'apporte rien, vous ferez perdre du temps à tout le monde et le sujet pourrait dévier ou devenir difficile à suivre.

Aussi, vérifiez la date du topic. Le déterrage de topic nuit au bon fonctionnement du forum et est interdit. Utilisez les boutons pouce en haut pour dire merci. Si le topic date de plus de deux mois sans réponses, mieux vaut ne pas répondre. Si vous avez une question similaire, créez plutôt votre propre sujet en détaillant votre contexte

Je ferme ce sujet.

  • Partager sur Facebook
  • Partager sur Twitter