Strstr

loubna_emsi -  
loubna_emsi Messages postés 6 Statut Membre -
Bonjour,
je veux savoir ou peut on trouver les fonction predefinie du C !!
par example on veux avoir la fonction strstr !!
g charcher ds string.h mais g trouver que le prototype !!! moi je veux toute la fonction
merci

10 réponses

le père
 
Bonjour,

Qu'appelles-tu avoir toute la fonction ?
Le code objet est dans une des bibliothèques (.lib) fournies avec le compilateur.
Le code source, les fabriquants de compilateurs (sauf open source) ne le rendent pas public.
0
loubna_emsi Messages postés 6 Statut Membre
 
ok merci
mais meme "lib" paske c un .obj je peu pa l oubrir ni le lire :s che pas avc kilprogrameon peu l ouvrir
0
le père
 
Tu peux toujours l'ouvrir avec un éditeur hexadécimal, mais ça ne t'aidera pas beaucoup. Le code objet est fait pour être lu par les machines, pas les humains.
0
loubna_emsi Messages postés 6 Statut Membre
 
beh moi tous simplement je veux fair la fonction strstr
comment la developer ???
merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
le père
 
Est-ce que je dois comprendre que tu as à faire un exercice qui consiste à écrire une fonction qui recherche une sous-chaîne dans une chaîne, comme strstr ?
Si c'est la cas, c'est ton travail : montre ce que tu as commencé à faire, il y aura ici plein de gens pour te guider, te corriger - pas pour faire ton travail à ta place.
Si ce n'est pas le cas, explique-nous l'intérêt de la manip.
0
loubna_emsi Messages postés 6 Statut Membre
 
voila ce ke g fait !
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
char *ch,*sch,*debut ;
int n=0,etat=0,j;
clrscr();
printf("entrez la chaine : \t");
gets(ch); debut=ch;
printf("entrez la sous-chaine : \t");
gets(sch);
//la langeur de la sous-chaine
while(*sch++)
{
n++;
}
for(j=0;j<=n;j++)
sch--;

//recherche de la sous-chaine
while(*sch&&etat==0&&*ch)
{

if (strncmp(sch,ch,n)!=0 )
ch++;
else
etat=1;
}

if(etat==1) puts(ch);
else puts("\n la sous-chaine n'existe pas !!");
getch();
}

mais le problem c ke g utiliser strncmp et il fo la reecrir aussi et moi g su ecrir ke strcmp mais strncmp je c pa cmt fair :s
0
le père
 
ça a l'air très bien parti.

Tu aurais dû sortir ta recherche pour en faire une fonction char * mastrstr (const char * s1, const char * s2) puisqu'au départ tu veux une fonction.

strncmp est peut-être encore plus simple à écrire. Il faut comparer les caractères de sch et ch un à un, et retourner VRAI si tu atteins la fin de sch ou le compte n sans avoir vu de différence (la 'vraie' fonction strncmp te dit si une chaine est supérieure à l'autre, mais ici ce n'est pas ton problème)
0
loubna_emsi Messages postés 6 Statut Membre
 
oui mais je C ecreie la strcmp

while(*ch &&*ch==*sch)
{
ch++;
sch++;
}k=*ch-*sch;
if (k==0) //les 2chaine son identik

masi leproblem ce ke la g utiliser strncmp alor je doi pa comparer toute la chaine (ch)
je dois compager just les n lettre de ch avc sch
( n=strlen(sch) )
mais ici strcmp compare toute la chaine :s:s
0
le père
 
compte les caractères et arrête-toi à n :
d'autre part, arrête aussi ta boucle si tu atteins la fin de schn, sinon ton programme risque de planter

// rend 0 si égalité jusqu'à n caractères max
int mastrncmp (const char * chn, const char * chn, int n) {

int i=0;

while(*ch && *sch ) {
if (*ch!= *sch) return 1; // différence
ch++;
sch++;
i++;
if (i>=n) return 0; // égalité sur n caractères
}
if (*sch!=*ch) return 1; // une chaîne plus courte que l'autre et que n
return 0;
}
0
loubna_emsi Messages postés 6 Statut Membre
 
merci bien
c gentil
voila g fai une otr solution et ca marche :
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
char *ch,*sch,*deb_sch,*deb_ch;
int j;
clrscr();
printf("entrez la chaine : \t");
gets(ch);
printf("entrez la sous-chaine : \t");
gets(sch); deb_sch=sch;
//recherche de la sous-chaine

while(*ch && *sch)
{ deb_ch=ch;
while(*sch && *sch==*ch)
{
sch++;
ch++;
}
if(*sch)
{
sch=deb_sch;
ch=deb_ch;
ch++;
}
}

if(!*sch) puts(deb_ch);
else puts("error!");
getch();
}
0