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
Configuration: Windows 98
Indeterminable Indeterminable

10 réponses

  1. 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
  2. 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
  3. 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
  4. loubna_emsi Messages postés 6 Statut Membre
     
    beh moi tous simplement je veux fair la fonction strstr
    comment la developer ???
    merci
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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