A voir également:
- [C] tableaux de pointeurs
- Tableaux croisés dynamiques - Guide
- Fusionner deux tableaux excel - Guide
- Tableau de combinaison loto 5/90 - Forum Excel
- Barbara veut calculer automatiquement son budget dans un tableau. citez un des logiciels lui permettant de faire des calculs sur des tableaux de nombres (tableur). - Forum Musique / Radio / Clip
- Impossible d'afficher le rapport de tableau croisé dynamique sur un rapport existant ✓ - Forum Excel
12 réponses
Luffy =)
Messages postés
365
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
19 mai 2006
110
15 mai 2005 à 23:16
15 mai 2005 à 23:16
salut =)
en fait ta déclaration n'est pas top (je ne sais pas si elle est valable ou pas, mais bon dans le pur style C, c'est pas terrible) :
car ce n'est pas un tableau de pointeur que tu dois déclarer, mais un tableau de char. il faut donc mettre :
ta variable mot sera alors un char * qui pointera vers la première case de ton tableau. donc quand tu appelles ta fonction ça donne :
et de même pour le scanf :
car tu passes un pointeur sur une chaine de caractères, donc ça marche !
++
en fait ta déclaration n'est pas top (je ne sais pas si elle est valable ou pas, mais bon dans le pur style C, c'est pas terrible) :
char *mot[20];
car ce n'est pas un tableau de pointeur que tu dois déclarer, mais un tableau de char. il faut donc mettre :
char mot[20];
ta variable mot sera alors un char * qui pointera vers la première case de ton tableau. donc quand tu appelles ta fonction ça donne :
nboccurences(texte,mot);
et de même pour le scanf :
scanf(" %s",texte);
car tu passes un pointeur sur une chaine de caractères, donc ça marche !
++
Luffy =)
Messages postés
365
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
19 mai 2006
110
15 mai 2005 à 23:40
15 mai 2005 à 23:40
le programme se termine
et sans erreur ? car ça peut être une erreur de dépassement de capacité (style tu rentres un texte de + de 200 caractères, mais l'os met un message en général...).
donc là si tu mets "je dis bonjour" ça marche pas ?
et sans erreur ? car ça peut être une erreur de dépassement de capacité (style tu rentres un texte de + de 200 caractères, mais l'os met un message en général...).
donc là si tu mets "je dis bonjour" ça marche pas ?
exact,
je ne tape pas un texte de plus que 200 caracteres :)
le programme me demande d'entrer le texte
j ecris par exemple 'je dis bonjour'
ensuite il me demande d'entrer un mot
et tt de suite il m affiche
"le nombre d'occurences est 0"
et il se termine
je ne comprends plus rien..
je ne tape pas un texte de plus que 200 caracteres :)
le programme me demande d'entrer le texte
j ecris par exemple 'je dis bonjour'
ensuite il me demande d'entrer un mot
et tt de suite il m affiche
"le nombre d'occurences est 0"
et il se termine
je ne comprends plus rien..
Luffy =)
Messages postés
365
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
19 mai 2006
110
16 mai 2005 à 00:00
16 mai 2005 à 00:00
ah ouais, alors quand tu disais c à dire qu il n arrive meme pas à saisir le mot recherché, en fait tu saisis quand même le mot recherché. bon il doit y avoir un pb dans ta fonction nboccurrences(). tu peux la montrer stp?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
je me suis peut etre mal exprimé, mais à vrai je ne saisi pas le mot recherché car le programme affiche directement le resultat, le voici
#include <stdio.h>
#include <stdlib.h>
/*cs : texte complet
ct : mot recherché*/
int nboccurences (char cs[], char ct[])
{
int nb = 0; /*initialiser le nombre d'occurences*/
int lengthct = strlen (ct); /* longueyr du mot recherché*/
while (1) /*repeter toujours! la fin sera indiquée*/
/* par le "return nb"*/
{
if (strstr (cs, ct) == NULL) /* ct ne se trouve pas ds cs*/
return nb; /* retourner le nombre*/
nb++; /*incrementer le nombre d'occurences*/
if (lengthct < strlen(cs)) /*reste encore du texte*/
cs = cs + lengthct; /* sauter le mot trouvé*/
else /*fin du texte*/
return nb; /* retourner le nombre*/
}
}
int main(void)
{
char mot[20];
char texte[200];
printf("Donner le texte: ");
scanf(" %s", texte);
printf("Donner le mot: ");
scanf("%s",mot);
printf("\n");
printf("Le nombre d'occurences est : %d\n",nboccurences(texte,mot));
return 0;
}
#include <stdio.h>
#include <stdlib.h>
/*cs : texte complet
ct : mot recherché*/
int nboccurences (char cs[], char ct[])
{
int nb = 0; /*initialiser le nombre d'occurences*/
int lengthct = strlen (ct); /* longueyr du mot recherché*/
while (1) /*repeter toujours! la fin sera indiquée*/
/* par le "return nb"*/
{
if (strstr (cs, ct) == NULL) /* ct ne se trouve pas ds cs*/
return nb; /* retourner le nombre*/
nb++; /*incrementer le nombre d'occurences*/
if (lengthct < strlen(cs)) /*reste encore du texte*/
cs = cs + lengthct; /* sauter le mot trouvé*/
else /*fin du texte*/
return nb; /* retourner le nombre*/
}
}
int main(void)
{
char mot[20];
char texte[200];
printf("Donner le texte: ");
scanf(" %s", texte);
printf("Donner le mot: ");
scanf("%s",mot);
printf("\n");
printf("Le nombre d'occurences est : %d\n",nboccurences(texte,mot));
return 0;
}
Luffy =)
Messages postés
365
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
19 mai 2006
110
16 mai 2005 à 00:09
16 mai 2005 à 00:09
en effet, je viens de le tester chez moi, et il ne me demande pas le mot recherché. je regardes plus en détail et je te dis.
au fait, chez moi il manquait l'entête #include <string.h> pour utiliser la fonction strlen().
au fait, chez moi il manquait l'entête #include <string.h> pour utiliser la fonction strlen().
oui désolée j'avais oublié de la copier
mais je crois pas que c'est la cause du prb
si jamais tu trouves l'erreur merci de me prevenir
Sophie
mais je crois pas que c'est la cause du prb
si jamais tu trouves l'erreur merci de me prevenir
Sophie
Luffy =)
Messages postés
365
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
19 mai 2006
110
16 mai 2005 à 00:17
16 mai 2005 à 00:17
en fait, il faut utiliser gets() plutot que scanf() il ne prend pas les espaces. par contre, quand je tapes "je dis bonjour" puis bonjour, il me renvoie 2. donc ça ne résout pas entièrement le problème...
je regarde ça.
je regarde ça.
si ca peut aider, tout à l heure quand j avais mis les scanf et je rentrais 'je je' comme texte ca me retourne 1
c 'est comme s il considerait le premier 'je' comme etant le texte et le second comme etant le mot recherché mais si ca me parait bizarre , c'est la seule deduction que j'ai pu faire..
c 'est comme s il considerait le premier 'je' comme etant le texte et le second comme etant le mot recherché mais si ca me parait bizarre , c'est la seule deduction que j'ai pu faire..
Luffy =)
Messages postés
365
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
19 mai 2006
110
16 mai 2005 à 00:42
16 mai 2005 à 00:42
ouais c'est bizarre, car dans la doc (http://www.cplusplus.com/ref/cstdio/scanf.html) ils disent quand même qu'on peut mettre des blancs (des "whitespaces" comme y disent... ) dans la chaine et que ça ne gêne pas si on met des espaces dans le
ou alors dans le %s il ne compte pas les espaces... à ce moment il faudrait savoir combien de mots entre le mano, mais ça donnerait du
pas pratique !
scanf(" %s ",texte);et non pas
scanf("%s", texte);mais comme je parle pas très bien anglais, je n'ai peut-être pas très bien compris.
ou alors dans le %s il ne compte pas les espaces... à ce moment il faudrait savoir combien de mots entre le mano, mais ça donnerait du
scanf("%s %s %s",texte);pour "je dis bonjour".
pas pratique !
Luffy =)
Messages postés
365
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
19 mai 2006
110
16 mai 2005 à 00:32
16 mai 2005 à 00:32
alors, j'ai changé un peu ta fonction nboccurrences et ça a l'air de marcher. en fait, j'utilise le retour de la fonction strstr(), qui renvoie une chaine de caractères où la première occurrence du mot cherché est trouvée. c'est-à-dire que si je fait :
j'aurais dans buffer "bonjour et au revoir".
donc après il faut incrémenté le pointeur de la longueur du mot recherché comme tu l'avais fait. ça donne ça :
voili voilou, désolé mais je garde ta fonction bien précieusement car ça peut toujours servir ça !
++ bonne nuit =)
buffer = strstr("je dis bonjour et au revoir", "bonjour");
j'aurais dans buffer "bonjour et au revoir".
donc après il faut incrémenté le pointeur de la longueur du mot recherché comme tu l'avais fait. ça donne ça :
int nboccurences (char cs[], char ct[]) { int nb = 0; /*initialiser le nombre d'occurences*/ int lengthct = strlen (ct); /* longueur du mot recherché*/ while (1) /*repeter toujours! la fin sera indiquée*/ /* par le "return nb"*/ { cs = strstr (cs, ct); if (cs==NULL) return nb; /* retourner le nombre*/ nb++; /*incrementer le nombre d'occurences*/ cs += lengthct; //il faut pointer après le mot qu'on vient de trouver if (lengthct >= strlen(cs)) /*reste encore du texte*/ return nb; /* retourner le nombre*/ } }
voili voilou, désolé mais je garde ta fonction bien précieusement car ça peut toujours servir ça !
++ bonne nuit =)
Merci infiniment!!
je ne sais vraiment pas comment te remercier,
merci pour ton temps et ta patience
bonne nuit
je ne sais vraiment pas comment te remercier,
merci pour ton temps et ta patience
bonne nuit
Luffy =)
Messages postés
365
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
19 mai 2006
110
16 mai 2005 à 00:44
16 mai 2005 à 00:44
mais de rien on est là pour ça ;-)
bon allez chuis crevé moi, et demain c'est po férié !!!!! :-(
bon allez chuis crevé moi, et demain c'est po férié !!!!! :-(
15 mai 2005 à 23:35
c à d que lorsque je saisie ('bonjour') comme texte et bonjour comme mot ca marche.
mais des que je fais entrer plus d un mot (comme texte)
le programme se termine c à dire qu il n arrive meme pas à saisir le mot recherché sachant qu il n y a pas d'erreur de compilation...
12 mai 2010 à 15:02