Rechercher un mot

Signaler
Messages postés
6
Date d'inscription
mardi 24 mai 2005
Statut
Membre
Dernière intervention
31 mai 2005
-
Messages postés
319
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
16 février 2009
-
bonjour
je débute en langage c et j'ai un projet à rendre pouvez vous m'aider ???
voici mon sujet:
rechercher un mot dans une page html (hors balise) par exemple sur google et le mettre en gras ou en couleur lorsqu'il est trouvé
merci d'avance

7 réponses

Messages postés
319
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
16 février 2009

Salut !

Essais d'être plus précis(e) dans la déscription de ton problème : est-ce que les données se trouvent dans un fichier, est-ce que tu doit créer un fichier pour le résultat, si oui dans quel format ? ...

@+ Neria
Messages postés
6
Date d'inscription
mardi 24 mai 2005
Statut
Membre
Dernière intervention
31 mai 2005

en fait je doi faire la recherche sur une page google


je ne doi rien créer de plus

l'utilisteur recherche un mot sur google et ce mot doi safficher en gras ou italique ou couleur ... dans les réponses trouvées c'est tout
merci beaucoup
Messages postés
319
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
16 février 2009

Tu utilises quel contrôle pour faire ça ? Parce que sinon il y a toujours moyen de récupérer la page affichée et de la modifier. Sinon, je n'ai pas vraiment de solutions...
Messages postés
6
Date d'inscription
mardi 24 mai 2005
Statut
Membre
Dernière intervention
31 mai 2005

pourriez vous voir si avec ce programme ca peu marcher ou sil manque des choses ??
merci beaucoup

#include <stdio.h>
#include <string.h>

main() {
int x=0;
int lgmot;
int lghtml;
int testmot=0;
char html[1200]; // c'est la chaine de caractère dans laquelle on
copie le fichier lu dans l'entrée standart
char temp[300]="";
char rouge[40]="contentait"; // chaîne qui va
copier
char mot[]="contentait"; // mot sert de référence pour la
comparaison des chaines
int i;
int test=0;
lgmot=strlen(mot); // récupère dans lgmot la longueur de la chaine
mot
*html=getchar(); // permet d'initialiser la première valeur de la
chaine html[0]
while ((*(html+x)) != EOF) { // cette boucle permet de lire le
fichier en entrée standart EOF signifis End Of File.
x=x+1;
*(html+x)=getchar();

}
*(html+x)='\0'; // rajoute '\0' Ã la fin de la chaine html: une
chaine se finit tjrs par le caractère \0 qui signifie la fin
x=0;
lghtml=strlen(html); // récupère ds lghtml la longueur de la chaîne
html
while (test == 0) {
if ((strncmp(mot,html+x,lgmot))==0) { // compare les chaînes de
caractères à la longueur de lgmot
test=1; // lorsqu'un mot est trouvé: la boucle s'arrête
testmot=1;
strcat(temp,html+x+lgmot); // copie toute la chaine html apres le mot
trouvé dans la chaine temp
strcpy(html+x,rouge); // met la chaine rouge à la position x dans la
chaine html
strcpy(html+x+20+lgmot,temp); // copie temp à html
}
if (x == lghtml) {
test=1;
printf("Pas de mot dans la page html\n");
}
x=x+1;
}

if (testmot==1) printf("%s\n",html);
//printf("%s\n",html);

}
Messages postés
319
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
16 février 2009

Salut !


Ton algorithme semble correct, bien que la saise de la page html soit un peu bizarre (tout saisir à la main...). Enfin il y a quand même un problème, c'est que la recherche s'arrête lorsque tu trouve la première occurence, hors je pense qu'il peut y en avoir plusieurs dans la page.
Je te propose un algo qui devrait fonctionner (il n'y a que la partie recherche) :


void main() {
int i, precedent=0, precedent2=0 ;
char html2[2000] ;


// Initialise tous html2 à 0
FillMemory(html2, 2000, 0) ;

// Parcours toute la chaine html
for (i=0; i<lghtml; i++) {
// Si un mot est trouvé
if (!strncmp((html+i), mot, lgmot))
{
// Copie tous les bloc qui précède ce mot depuis la dernière copie
memcpy((html2+precedent2), html+i, (i-precedent)) ;
// Copie le mot entouré des balises
memcpy((html2+precedent2+i), "", 21) ;
memcpy((html2+precedent2+i+21), mot, lgmot) ;
memcpy((html2+precedent2+i+21+lgmot, "", 8) ;
// Met à jour la dernière copie
precedent=i ; // Pointeur dans html
precedent2+= 29 + lgmot ; // Pointeur dans html2
}
}


// Il faut répéter la dernière opération
memcpy((html2+precedent2), html+precedent, (i-precedent)) ;


// Si on a trouvé une occurence
if (!precedent)
printf("Pas d'occurence de %s trouvée dans la page\n", mot) ;
}


Bien sur il peut être encore améliorer, il faudrait enlever cet affreux char html2[2000] et faire un tableau dynamique qui se redimensionne à chaque ajout.
on pourrait aussi utiliser une classe CSS2 dans la balise FONT afin que l'on puisse modifier dynamiquement l'affichage des mots trouvés sans avoir besoin de tout re coder.
Un autre conseil : quand tu déclare une chaine évite de faire :
char rouge[40]="contentait";
et fait plutot :
char rouge[]="contentait";
ça t'évite 1) de déclarer un espace mémoire alors que ce n'est pas nécessaire et de 2) avoir à compter tous les caractères de la chaîne. Amuses toi bien ;)


@+ Neria



PS : Sais tu lire les données à partir d'un fichier ?
Messages postés
6
Date d'inscription
mardi 24 mai 2005
Statut
Membre
Dernière intervention
31 mai 2005

merci bcp pour ton aide mais je pense ke je vais m'arrèter à ca surtout ke je dois le rendre très prochainement ...
c'est trop compliké pour moi le c ;)
merci encore et petet à bientot
Adeline
Messages postés
319
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
16 février 2009

Salut !

De rien, mais c'est domage de s'arrêter si tôt, alors que l'on peut faire plein de choses avec le C (plus que tu ne l'imagines) et encore plus avec le C++. En tout cas je te souhaites bonne chance pour la suite ;)

@+ Neria