[C] tableaux de pointeurs

Fermé
sophie - 15 mai 2005 à 22:32
 kamerra - 12 mai 2010 à 15:02
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

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
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) :
 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 !

++
0
merci ca avance, mais lentement
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...
0
slt urgent je vais un programme executable de remlissage de tableau en pointeur et affichage
0
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
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 ?
0
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..
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: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?
0

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;
}
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
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().
0
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
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: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.
0
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..
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: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
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 !
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: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 :
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 =)
0
Merci infiniment!!
je ne sais vraiment pas comment te remercier,
merci pour ton temps et ta patience

bonne nuit
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:44
mais de rien on est là pour ça ;-)

bon allez chuis crevé moi, et demain c'est po férié !!!!! :-(
0