Recuperer une chaine entre 2 autres chaines

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
Bonjour , je voudrai comme le titre l'indique une fonction en C/C++ qui va récupérer une chaine compris entre deux autres chaines, exemple :

int main()
{
    char chaine[] = "<strong>Henry pool is heaer </strong>";
    char debut[] = "<strong>", fin[] = "</strong>", resultat[50] = "";
	
    // Avoir se qu'il y à entre la variable "debut" et "fin" et le mettre dans "resultat"
    resultat = extract(chaine, debut, fin);
    printf("%s\n", resultat);

    return 0;
}


J'ai chercher sur le web mais j'ai trouvé cette fonction qu'en PHP et en C# mais je la veux en C/C++, j'attends vos réponses et Merci d'avance ;)

2 réponses

  1. chuka Messages postés 980 Statut Membre 379
     
    Salut,
    tu peux essayer un truc comme cela:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main(int argc, char** argv) {
    char* chaine = "<strong>Henry pool is heaer </strong>";
        char* debut = "<strong>";
        char* fin = "</strong>";
        char*res;
        unsigned char cpt;
        while (strncmp(chaine++,debut,strlen(debut)));
        chaine+=strlen(debut)-1;
        res=chaine;
        while (strncmp(chaine++,fin,strlen(fin)));
        cpt=chaine-res-1;
        printf("%.*s\n",cpt,res);
        return (EXIT_SUCCESS);
    }
    

    si tu veux une fonction:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    char* extract(char*data,char* deb,char* end,unsigned char* cmpt);
    int main(int argc, char** argv) {
    char* chaine = "<strong>Henry pool is heaer </strong>";
        char* debut = "<strong>";
        char* fin = "</strong>";
        unsigned char cpt;
        chaine=extract(chaine,debut,fin,&cpt);
        printf("%.*s\n",cpt,chaine);
        return (EXIT_SUCCESS);
    }
    char* extract(char*data,char* deb,char* end,unsigned char* cmpt)
    {
        char*res;
        while (strncmp(data++,deb,strlen(deb)));
        data+=strlen(deb)-1;
        res=data;
        while (strncmp(data++,end,strlen(end)));
        *cmpt=data-res-1;
        return res;
    }
    

    Il n'y a pas de gestion de débordement donc c'est à toi de modifier le code pour cela!!;)
    @+
    0
  2. Utilisateur anonyme
     
    Trop sympa x) mille MERCI ;) et je vais voir quoi faire pour les "buffer overflow" . Encore merci :)
    0