Recuperer une chaine entre 2 autres chaines

Résolu/Fermé
Utilisateur anonyme - 30 janv. 2010 à 13:38
 Utilisateur anonyme - 30 janv. 2010 à 23:48
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 ;)
A voir également:

2 réponses

chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
30 janv. 2010 à 14:06
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
Utilisateur anonyme
30 janv. 2010 à 23:48
Trop sympa x) mille MERCI ;) et je vais voir quoi faire pour les "buffer overflow" . Encore merci :)
0