[C] tableaux de pointeurs
sophie
-
kamerra -
kamerra -
bonsoir,
j'ai un soucis avec les tableaux de pointeurs
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;
}
voici le programme qui fait appel à la fonction nboccurences qui recoit en argument 2 chaines de caracteres .
mon probleme est comment faire appel à cette fonction
la compilation ne s'effectue que lorsque je mets nboccurences(*texte,*mot)...
je voudrais donc comprendre se qui se passe et aussi savoir ce qu il faut mettre dans le scanf
merci de m'informer sur ce point
Cordialement
Sophie
j'ai un soucis avec les tableaux de pointeurs
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;
}
voici le programme qui fait appel à la fonction nboccurences qui recoit en argument 2 chaines de caracteres .
mon probleme est comment faire appel à cette fonction
la compilation ne s'effectue que lorsque je mets nboccurences(*texte,*mot)...
je voudrais donc comprendre se qui se passe et aussi savoir ce qu il faut mettre dans le scanf
merci de m'informer sur ce point
Cordialement
Sophie
A voir également:
- [C] tableaux de pointeurs
- Tableaux croisés dynamiques - Guide
- Fusionner deux tableaux excel - Guide
- Les tableaux word - Guide
- Tableau de combinaison loto 5/90 - Forum Excel
- Tableau de code ascii - Guide
12 réponses
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 !
++
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..
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;
}
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
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..
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 !
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 =)
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...