Extraction des mots d'une phrase
mimi
-
sambia39 Messages postés 610 Date d'inscription Statut Membre Dernière intervention -
sambia39 Messages postés 610 Date d'inscription Statut Membre Dernière intervention -
salut tous le monde
je suis très débutante en c et j'ai besoin de corriger ma faute..
j'écris un petit programme qui découpe une phrase en des mots et celui ça marche bien mais le problème est que j'ai besoin de remplir ces mots dans un tableau.
Merci bien d'avance.. voila mon code :
je suis très débutante en c et j'ai besoin de corriger ma faute..
j'écris un petit programme qui découpe une phrase en des mots et celui ça marche bien mais le problème est que j'ai besoin de remplir ces mots dans un tableau.
Merci bien d'avance.. voila mon code :
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #define N 1000000 void main() { char tab[100000]; int j=1; char chaine[]="ce livre est consacré à l'etude des bases de donnnées et plus particuliérement à l'etude des bases de données XML"; int i; for(i=0;chaine[i]!='\0';i++) { if(chaine[i]!=' ') { tab[j]=chaine[i]; j++; } else printf("\n"); } }
A voir également:
- Extraction des mots d'une phrase
- Vérifier si une phrase est correcte - Accueil - Google
- Mots entre amis messenger solution ✓ - Forum jeux en ligne
- Certains de vos mots de passe enregistrés ont été divulgués en ligne - Forum Virus
- Mettre une phrase en majuscule - Guide
- Jeu Mots Entre Amis sur facebook - Forum Facebook
1 réponse
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
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,
Dal