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
- Ce programme est écrit en python. il construit un mot secret dans une variable mais il ne l'affiche pas. modifiez-le pour qu'il affiche le mot secret. exécutez-le. quel est ce mot secret ? ✓ - Forum Python
- Construire une phrase avec des mots donnés ✓ - Forum Loisirs / Divertissements
- Mots de passe enregistrés - Guide
- Trouver une phrase avec des lettres dans le désordre - Forum Loisirs / Divertissements
- Que veut dire ^^ a la fin d'une phrase ✓ - Forum Messagerie
1 réponse
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 816
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
#include <stdio.h> #include <conio.h> #define N 1000000 int main(void) {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; int j=0; int k=0; char tab[j][k]; for(i=0;chaine[i]!='\0';i++) { if(chaine[i]!=' ') { i++; } else { printf("%c",chaine[i]); tab[j][k]=chaine[i]; j++; k++; } } }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