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
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
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
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
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
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.
Le Tout est souvent plus grand que la somme de ses parties.
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.
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
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é.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
En recherche d'emploi.
Le Tout est souvent plus grand que la somme de ses parties.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le Tout est souvent plus grand que la somme de ses parties.
En recherche d'emploi.
Le Tout est souvent plus grand que la somme de ses parties.