Flux rss
Collection CommentÇaMarche.net
Rechercher : dans
Par :

[C] tableaux de pointeurs

sophie, le dimanche 15 mai 2005 à 22:32:31 
 Signaler ce message aux modérateurs

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

1

Luffy =), le dimanche 15 mai 2005 à 23:16:00

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 !

++ Le Parisien, il vaut mieux l'avoir en journal !!! :-P

Répondre à Luffy =)

2

sophie, le dimanche 15 mai 2005 à 23:35:41

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

Répondre à sophie

3

Luffy =), le dimanche 15 mai 2005 à 23:40:59

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 ? Le Parisien, il vaut mieux l'avoir en journal !!! :-P

Répondre à Luffy =)

4

sophie, le dimanche 15 mai 2005 à 23:50:34

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

Répondre à sophie

5

Luffy =), le lundi 16 mai 2005 à 00:00:29

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?
Le Parisien, il vaut mieux l'avoir en journal !!! :-P

Répondre à Luffy =)

6

sophie, le lundi 16 mai 2005 à 00:03:48

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;
}

Répondre à sophie

7

Luffy =), le lundi 16 mai 2005 à 00:09:49

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(). Le Parisien, il vaut mieux l'avoir en journal !!! :-P

Répondre à Luffy =)

8

sophie, le lundi 16 mai 2005 à 00:14:46

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

Répondre à sophie

9

Luffy =), le lundi 16 mai 2005 à 00:17:34

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. Le Parisien, il vaut mieux l'avoir en journal !!! :-P

Répondre à Luffy =)

10

frup, le lundi 16 mai 2005 à 00:30:27

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

Répondre à frup

13

Luffy =), le lundi 16 mai 2005 à 00:42:44

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 ! Le Parisien, il vaut mieux l'avoir en journal !!! :-P

Répondre à Luffy =)

11

Luffy =), le lundi 16 mai 2005 à 00:32:17

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 =) Le Parisien, il vaut mieux l'avoir en journal !!! :-P

Répondre à Luffy =)

12

sophie, le lundi 16 mai 2005 à 00:42:09

Merci infiniment!!
je ne sais vraiment pas comment te remercier,
merci pour ton temps et ta patience

bonne nuit

Répondre à sophie

14

 Luffy =), le lundi 16 mai 2005 à 00:44:34

Mais de rien on est là pour ça ;-)

bon allez chuis crevé moi, et demain c'est po férié !!!!! :-( Le Parisien, il vaut mieux l'avoir en journal !!! :-P

Répondre à Luffy =)
Langage C++ - Les pointeurs Comme en langage C, le langage C++ permet d'utiliser des pointeurs pour manipuler des données, mais il introduit aussi le concept de référence, très pratique pour permettre la modification d'une donnée passée en paramètre d'une fonction. Définition... www.commentcamarche.net/contents/cpp/cpppoint.php3
C# tableau salut je n'arrive pas a bien me servir des tableaux a plusieurs dimension. En fait je dispose d'une structure [B]Vorlesung/B: public struct Vorlesung { private int nummer; public String Dozent { get; set; } public String kurzbezeichnung { get; set; }... www.commentcamarche.net/forum/affich-10424756-c-tableau
[C] pointeur tableau et fonction (Résolu) Bonjour ! Je suis en train de programmer en C pour un logiciel, et je me retrouve face a un petit probleme de passage d'argument dans une fonction. En fait je declare un pointeur de plusieurs entiers, et un pointeur de plusieurs tableaux de 10000... www.commentcamarche.net/forum/affich-2442403-c-pointeur-tableau-et-fonction
[c++] tri de tableauBonsoir, j'aimerais faire un tri d'un tableau contenant des types point composé de x (ordonné) et de t (le temps), et j'aimerais trier le tableau efficacement en ordre croissant en fonction de t plus précisément trier le tableau pointé par pv. voici... www.commentcamarche.net/forum/affich-2533399-c-tri-de-tableau
Tableau de Chaines en CBonjour à tous, ma question est simple et grossomodo dans le titre, comment définir un tableau de chaines de caractères en langage C ??? J'ai essayé : typedef struct ch{ char nom[50]; }chaine; ...dans le main : chaine tableau[255]; Jusque là tout va... www.commentcamarche.net/forum/affich-1625522-tableau-de-chaines-en-c
Chaine de caractères dans un tableau en C++Bonjour. J'aimerais savoir, dans Visual C++, comment il faut faire pour parvenir à inserer une chaine de caractères dans un tableau. Je souhaiterai une réponse le plus vite possible. Merci. FTS www.commentcamarche.net/forum/affich-1863719-chaine-de-caracteres-dans-un-tableau-en-c
Les pointeurs en langage CDéfinition d'un pointeur Un pointeur est une variable contenant l'adresse d'une autre variable d'un type donné. La notion de pointeur fait souvent peur car il s'agit d'une technique de programmation très puissante, permettant de définir des... www.commentcamarche.net/contents/c/cpoint.php3
Les structures en langage CDifférence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de... www.commentcamarche.net/contents/c/cstruct.php3
Langage C - Les variablesLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage C sont typées, c'est-à-dire que les données contenues dans... www.commentcamarche.net/contents/c/cvar.php3