Extraction des mots d'une phrase
Fermé
mimi
-
22 févr. 2014 à 17:14
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 24 févr. 2014 à 17:46
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 24 févr. 2014 à 17:46
A voir également:
- Extraction des mots d'une phrase
- Vérifier si une phrase est correcte - Accueil - Google
- Identifiants et mots de passe - Guide
- Tapez cette phrase, en respectant bien les espaces et la ponctuation. - Guide
- Mots entre amis messenger solution ✓ - Forum jeux en ligne
1 réponse
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
Modifié par fiddy le 22/02/2014 à 18:36
Modifié par fiddy le 22/02/2014 à 18:36
Bonjour,
#include <conio.h>
Ce header est non standard. Et comme tu ne t'en sers pas en plus, tu peux donc l'enlever.
#include <stdlib.h>
#include <string.h>
Pour info, c'est inutile ici car tu ne te sers pas de fonctions dont les prototypes sont déclarés dedans. Mais tu peux les laisser si tu veux.
void main()
Le prototype correct de main() sans argument est : int main(void).
char tab[100000];
Tu as fait un #define N 100000. Autant le réutiliser : char tab[N];
Le type n'est pas bon. Tu veux un tableau de mots. Autrement dit, tu souhaites un tableau de chaînes de caractères. Il faut donc 2 dimensions : char tab[X][Y]; ou char *tab[X]; (mais à toi de gérer l'allocation dynamique avec malloc()).
if(chaine[i]!=' ')
tab[j]=chaine[i];j++
Là, tu vas copier toutes les lettres sauf les espaces.
Avec le bon type de tab (cf. remarque plus haute), il faudra faire tab[j][k]=chaine[i]; (oui il faut une autre variable k qu'il faudra remettre à 0 lorsque chaine[i]==' ';
j++;
A mettre plutôt lorsque chaine[i]==' ' (mot suivant).
Et enfin, n'oublie pas le return 0; en fin de main() pour dire que tout s'est bien déroulé.
Le programme ne sera pas encore parfait avec tout ça (pas de gestion du double espace, etc.). Pour info, il existe des fonctions permettant de faire le découpage. Mais j'imagine qu'il s'agit d'un exercice où on te demande de le faire toi-même ?
Corrige tout ça, et n'hésite pas à le reposter avec les corrections s'il reste des erreurs.
Cdlt,
Google is your friend
#include <conio.h>
Ce header est non standard. Et comme tu ne t'en sers pas en plus, tu peux donc l'enlever.
#include <stdlib.h>
#include <string.h>
Pour info, c'est inutile ici car tu ne te sers pas de fonctions dont les prototypes sont déclarés dedans. Mais tu peux les laisser si tu veux.
void main()
Le prototype correct de main() sans argument est : int main(void).
char tab[100000];
Tu as fait un #define N 100000. Autant le réutiliser : char tab[N];
Le type n'est pas bon. Tu veux un tableau de mots. Autrement dit, tu souhaites un tableau de chaînes de caractères. Il faut donc 2 dimensions : char tab[X][Y]; ou char *tab[X]; (mais à toi de gérer l'allocation dynamique avec malloc()).
if(chaine[i]!=' ')
tab[j]=chaine[i];j++
Là, tu vas copier toutes les lettres sauf les espaces.
Avec le bon type de tab (cf. remarque plus haute), il faudra faire tab[j][k]=chaine[i]; (oui il faut une autre variable k qu'il faudra remettre à 0 lorsque chaine[i]==' ';
j++;
A mettre plutôt lorsque chaine[i]==' ' (mot suivant).
Et enfin, n'oublie pas le return 0; en fin de main() pour dire que tout s'est bien déroulé.
Le programme ne sera pas encore parfait avec tout ça (pas de gestion du double espace, etc.). Pour info, il existe des fonctions permettant de faire le découpage. Mais j'imagine qu'il s'agit d'un exercice où on te demande de le faire toi-même ?
Corrige tout ça, et n'hésite pas à le reposter avec les corrections s'il reste des erreurs.
Cdlt,
Google is your friend
22 févr. 2014 à 20:58
23 févr. 2014 à 20:05
char tab[j][k];
j et k valent 0. Donc ton tableau n'est pas très grand... A toi de choisir un tableau suffisament grand pour contenir tes élements (1ère dimension = nombre de mots) 2eme dimension = taille max des mots (attention au caractère de fin))
if(chaine[i]!=' ')
{
i++;
}
<pourquoi i++ ? C'est déjà fait dans le compteur.
printf("%c",chaine[i]);
tab[j][k]=chaine[i];
Tu l'as mis dans le cas chaine[i]==' '. Donc tab[j][k] vaudra ' '. C'est pas ici qu'il faut le mettre.
Tu as oublié de remettre k à 0 lorsque chaine[i]==' '.
k++;
C'est à mettre plutôt dans le cas chaine[i]!=' '.
N'hésite pas à faire l'algorithme sur un papier, cela t'aidera à comprendre pourquoi et à faire le bon algorithme.
Cdlt,
24 févr. 2014 à 10:11
Dal
24 févr. 2014 à 14:14
24 févr. 2014 à 14:44