[C] tableaux de pointeurs

sophie -  
 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

12 réponses

Luffy =) Messages postés 365 Date d'inscription   Statut Membre Dernière intervention   110
 
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
sophie
 
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
kamerra
 
slt urgent je vais un programme executable de remlissage de tableau en pointeur et affichage
0
Luffy =) Messages postés 365 Date d'inscription   Statut Membre Dernière intervention   110
 
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
sophie
 
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   Statut Membre Dernière intervention   110
 
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
sophie
 
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   Statut Membre Dernière intervention   110
 
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
sophie
 
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   Statut Membre Dernière intervention   110
 
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
frup
 
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   Statut Membre Dernière intervention   110
 
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   Statut Membre Dernière intervention   110
 
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
sophie
 
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   Statut Membre Dernière intervention   110
 
mais de rien on est là pour ça ;-)

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