Partage
  • Partager sur Facebook
  • Partager sur Twitter

compter le nombre de mots d'une chaine

    6 septembre 2021 à 11:32:00

    bonjour!

    voici la question:Ecrire un programme qui détermine le nombre de mots présents dans une phrase fournie par l’utilisateur

    J'ai eu à fournir une solution qui me semble correct mais ca ne marche pas

    #include<stdio.h>
    #include<string.h>
    int main()
    {
      char mot[100];
      int i, count = 1;
       
      printf("Entrer une chaîne de caractère :  ");
      scanf("%s",mot);
        for(i = 0; mot[i] != '\0'; i++)
      {
        if(mot[i] == ' ' || mot[i] == '\t' || mot[i] == '\n')
        {
          count++;  
        } 
      }  
      printf("Le nombre total de mots dans cette chaîne est = %d", count);
        
      return 0;
    }
    
    
    

    -
    Edité par FatimatouZahraTALL 6 septembre 2021 à 11:37:34

    • Partager sur Facebook
    • Partager sur Twitter
      6 septembre 2021 à 11:38:55

      Bonjour,

      Ligne 9 tu récupères un mot que tu mets dans une variable imaginaire appelée str. (attention : c'est quoi str, attention scanf("%s") permet de lire un mot pas une phase!)
      Ligne 10 tu supposes que le tableau mot contient une phase.

      Edit:

      str a été corrigé, il reste que scanf("%s") ne lit qu'un mot à remplacer p.e. par 

      fgets(mot,sizeof(mot),stdin);

      -
      Edité par Dalfab 6 septembre 2021 à 11:41:33

      • Partager sur Facebook
      • Partager sur Twitter

      En recherche d'emploi.

        6 septembre 2021 à 11:55:37

        j'ai compris pour le fgets mais ne s'agit-il pas des pointeurs?

        je ne savais par pour ("%s") merci beaucoup

        Dalfab a écrit:

        Bonjour,

        Ligne 9 tu récupères un mot que tu mets dans une variable imaginaire appelée str. (attention : c'est quoi str, attention scanf("%s") permet de lire un mot pas une phase!)
        Ligne 10 tu supposes que le tableau mot contient une phase.

        Edit:

        str a été corrigé, il reste que scanf("%s") ne lit qu'un mot à remplacer p.e. par 

        fgets(mot,sizeof(mot),stdin);

        -
        Edité par Dalfab il y a 9 minutes



        -
        Edité par FatimatouZahraTALL 6 septembre 2021 à 12:08:26

        • Partager sur Facebook
        • Partager sur Twitter
          6 septembre 2021 à 17:03:04

          Dans ce code, tu n'as pas besoin de  string.h
          Et si tu avais plusieurs espaces entre les mots, ou si la phrase commence ou se termine par un espace?
          • Partager sur Facebook
          • Partager sur Twitter

          Le Tout est souvent plus grand que la somme de ses parties.

            6 septembre 2021 à 17:48:25

            Hello,

            FatimatouZahraTALL a écrit:

            j'ai compris pour le fgets mais ne s'agit-il pas des pointeurs?

            Non, pas plus que dans le scanf(): mot (dans les deux cas) est de type tableau de 100 char, pas de type pointeur sur char. Mais lors d'appel à scanf() ou fgets(), ce type est "converti" en pointeur sur char (mais ça ne concerne pas ta partie de code).

            -
            Edité par edgarjacobs 6 septembre 2021 à 17:49:52

            • Partager sur Facebook
            • Partager sur Twitter

            Il y a ceux qui font des sauvegardes, et ceux qui n'ont pas encore eu d'incident....

              7 septembre 2021 à 17:18:06

              PierrotLeFou a écrit:

              Dans ce code, tu n'as pas besoin de  string.h
              Et si tu avais plusieurs espaces entre les mots, ou si la phrase commence ou se termine par un espace?

              D'ou l'utilité de \t



              • Partager sur Facebook
              • Partager sur Twitter
                7 septembre 2021 à 18:29:48

                Je ne vois pas l'utilité de \t dans le contexte.
                Suppose que j'ai la phrase:
                \til\t\tetait\t\tun  petit navire
                Ça donne combien de mots? Ça devrait donner 5 mots.
                • Partager sur Facebook
                • Partager sur Twitter

                Le Tout est souvent plus grand que la somme de ses parties.

                  7 septembre 2021 à 18:43:27

                  FatimatouZahraTALL a écrit:

                  PierrotLeFou a écrit:

                  Dans ce code, tu n'as pas besoin de  string.h
                  Et si tu avais plusieurs espaces entre les mots, ou si la phrase commence ou se termine par un espace?

                  D'ou l'utilité de \t

                  \t est un caractère spécial qui correspond à une tabulation. Si le texte a 2 espaces successifs, ton code verras 2 fois un espace, il ne verras pas une tabulation, et il comptera un mot de trop. S'il y a un espace au début ou à la fin de la phrase ça comptera aussi des mots en trop.
                  Ton énoncé doit surement indiquer si le texte peut ou pas avoir des espaces multiples, peut-être qu'aussi il faut gérer les d'autres caractères. Lis cette phrase "D'habitude l'apostrophe    sépare les mots,mais peut-être pas aujourd'hui;  Combien y a-t-il de mots de cette phrase    ? ".
                  Les apostrophes, les tirets, les virgules, les points-virgules peuvent aussi séparer des mots.

                  -
                  Edité par Dalfab 7 septembre 2021 à 18:44:47

                  • Partager sur Facebook
                  • Partager sur Twitter

                  En recherche d'emploi.

                    7 septembre 2021 à 19:07:47

                    Ça me rappelle ton exercice voyelles.

                    Tu pourrais suivre le même principe :

                    #include <stdio.h>
                    #include <ctype.h>
                    
                    int main(void)
                    {
                        int nbmot=0;
                        int mot = 0;
                        char c;
                    
                        while((c = getchar()) != '\n')
                        {
                            if(isalpha(c)) mot=1;
                            if(mot==1 && isblank(c))
                            {
                                mot=0;
                                nbmot++;
                            }
                        }
                        printf("Il y a %d mots.", nbmot);
                    
                        return 0;
                    }



                    • Partager sur Facebook
                    • Partager sur Twitter
                      7 septembre 2021 à 19:17:40

                      Pour la tabulation, il faut faire la différence entre ce qu'il y a dans le fichier et ce qui est affiché à l'écran.
                      Dans le fichier, le tab ne compte que pour un caractère même si on en voit pllusieurs.
                      Pour les autres caractères, il faudrait en effet préciser ce qu'on peut accepter comme séparateur de mot.
                      il\tetait ne contient qu'un tab
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Le Tout est souvent plus grand que la somme de ses parties.

                      compter le nombre de mots d'une chaine

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      • Editeur
                      • Markdown