Aller au contenu

Urgent : besoin d'aide pour un programme en C


Samus

Messages recommandés

Tu peux enlever "iostream", j'avais pas fait gaffe en collant le texte.

Si tu as d'autres erreurs de compilation, il faut ajouter <string.h.>.

Quand tu exécutes le programme, tu as bien une console qui s'ouvre et on te demande un mot ? Normalement en sortie, le fichier est le même sauf que le mot que tu as donné est mis en gras, s'il est trouvé dans le document, bien sûr !

S'il n'est pas trouvé, tu auras exactement le même fichier qu'en entrée.

Lien vers le commentaire
Partager sur d’autres sites

$ cat test.cpp
#include <iostream.h>
int main() { return(0); }

$ gcc test.cpp
(...) #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated. (...)

Oui Oui, iostream.h est marqué DEPRECATED !? (d'après le standard C++, pas d'après visual-c++...) va falloir oublier les .h pour le cpp... :(

j'aime pas qu'on change mes habitudes !!! :yes:

Lien vers le commentaire
Partager sur d’autres sites

Tiens yen a un qui m'a suivi :zarb:

Bref j'ai rendu un truc imcomplet mias je dois finir ce programme quand même.

Il faut au moins que je comprenne comment faire.

En fait mon énoncé à moi est peu clair : les couples de balises inutiles style <font></font>, je pensais que c'etait les blaises qui n'avaient pas besoin d'etre ferméés, mais jen ai parle avec un pote et lui a compris que cetait tout simplement les balises vides qu'il fallait supprimer. Je me renseigne et je vous en dis plus :D

Comme l'a dit ashley, on veut pas abuser, mais la on est vraiment à l'ouest, et on est pas en école d'inge... on galere vraiment :transpi:

Merci de votre aide :)

Lien vers le commentaire
Partager sur d’autres sites

Moi aussi j'ai compris que c'etait les balises vides à supprimer <></>

Le principe, dès que tu trouve un caractère '<' dans ton buffer, tu stock le nom de la balise jusqu'à trouver '>'.

Et si derrière tu retrouve '</', tu recupere encore le nom et tu compare.

Si les noms sont les mêmes, tu ne recopie pas dans ton fichier de sortie, sinon, ben si ^^

Lien vers le commentaire
Partager sur d’autres sites

Pour le truc de mettre en gras :

T'es un copain de Samus ? He les mecs, il faudrait peut-être faire vos devoirs tout seul  :D

On veut bien donné un coup de main, mais faut pas abuser...

Le prog que tu donnes est correct mais si tu débutes en C, celui-ci est plus simple à comprendre ( ne t'embêtes avec des buffers si tu n'en n'as pas l'utilité ):

Autrement, tu peux très bien adapter le code que tu as en reprenant la boucle sur le buffer et non sur le fichier. Tu lis les carctères du buffer et tu compares avec ton mot à trouver.

:transpi:

Le code que tu donne est completement (j'exgère u peu) faux, là tu lit à chaque tour de boucle un paquet de caractères de longueur du mot recherché, petite demonstartion :

"voici une phrase au pif"

phrase : 6 caractères, on recherche ce mot dans la phrase precedente :

premier passage dans la boucle :

"voici " (5 letrres + espace) "voici " != phrase -> c'est pas bon

deuxième passage :

on relit 6 caractères comme indiqué dans ton code

"une ph" != phrase

troisième

"rase a" != phrase

pas la peine de continuer, ton truc a à peu près 1 chance sur 100 000 de fonctionner si jamais par chance au début d'un tour de boucle on se trouve juste avant le mot recherché

donc voilà tout ça pour dire que effectivement si tu as choix les expressions régulières seraient certainement plus simples, sinon il faut analyser tou le fichier et comparer les mots et non les groupes decaractères, donc un truc du style,

tant que le caractère courant lu est different de espace, je l'ajoute au mot en cours, sinon si c'est un espace je compare toute les lettres precedentes ajoutées - au mot recherché.

et puis de toute façon il y aurait peut-être eu aussi un problème du fait que le mot lu ne contient pas" \0" alors que le mot saisit au clavier doit l'avoir, donc avant de comparer les chaines il faudra peut-être ajouter "\0" à celle lue dans le fichier.

Lien vers le commentaire
Partager sur d’autres sites

OK Magnig, j'ai fait une grosse bêtise... :ouioui:

Il a bien sûr raison, mon prog ne fonctionnera pas ou avec beaucoup de chance.

Pour le "\0", il n'y en a pas dans le mot à chercher car la fonction gets ne le récupère pas.

Pour trouver le mot, tu fais comme dit magnig, il faut lire les caracteres, les stocker, et ensuite le comparer à ton mot caractere par caractere. C'est un poil plus compliqué que ce que j'avais fait...

Désolée de t'avoir induit en erreur, j'ai fait ça vite et il était tard... Oui je cherche des excuses.

Allez, je vais me cacher :mdr:

Lien vers le commentaire
Partager sur d’autres sites

MissZaza, je viens de réessayer ton programme ce matin, il fonctionne en partie on va dire.Quand je lui demande de chercher un des deux premiers mots, il les affiche en gras dans myfileOut.html mais quand je lui demande de chercher un mot se situant plus loin il ne m'affiche rien en gras.

J'ai compris le problème que Magnig a décrit mais je ne sais pas comment le rectifier, je veux dire je ne sais pas comment ça se traduit en code. :ouioui:

Ps:Tu n'as pas à t'excuser pour ton erreur, c'est déja sympa de nous aider et puis ça me fait comprendre comment le C fonctionne. :mdr:

Lien vers le commentaire
Partager sur d’autres sites

Ce code devrait fonctionner, à vérifier :

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[])

{

  // Déclarations

  char mot[256];

  char tmp[256];

  int r;

  int taille;

  long pos;

  char c;

  //Ouverture des fichiers en lecture et écriture

  FILE *file = fopen("myfile.html","r");

  FILE *fileOut = fopen("myfileOut.html","w+");

  if (file==NULL) perror ("Error opening file");

  else

  {       

      printf("Mot a rechercher :"); // Demande du mot à rechercher

      gets (mot); // Récupération du mot

      taille = strlen(mot); // taille = nombre de lettres de mot     

      // Boucle sur le fichier

      do { 

          pos = ftell ( file ); // Sauvegarde de la position

          c = fgetc(file);    // Lecture d'un caractere

          if ( c == mot[0] ) {

            fseek (file,pos,SEEK_SET);  // Retour à la position précédente

            fgets (tmp , taille+1, file); // Lecture de (taille+1) caracteres                           

            r = strcmp(tmp,mot); // Comparaison avec le mot a trouver

            if ( r==0 ) {

                // Le mot est le bon, il faut l'ecrire dans le fichier en gras

                fputs ("<B>", fileOut);

                fputs (tmp, fileOut);

                fputs ("</B>", fileOut);

                fseek (file,pos+taille,SEEK_SET); // On pointe sur la position de depart + taille du mot           

            }

            else {

                // Le mot n'est pas le bon, on ecrit juste le caractere

                fputc (c, fileOut); // Ecriture du caractere

                fseek (file,pos+1,SEEK_SET); // On pointe sur la position de depart + 1 caractere           

            }

          }

          else fputc (c, fileOut); // Ecriture du caractere

      } while (c!=EOF);

  }

  system("PAUSE");

  return 0;

}

Par contre, cela va également trouver les sous-chaines, si tu cherches "le" et que ton texte est "le programme est lent", il va te trouver "le programme est lent". Il ne va détecter non plus les majuscules, pour cela il faudrait ajouter des comparaisons.

C'est ma dernière proposition en espérant que c'est correct.

A+.

Lien vers le commentaire
Partager sur d’autres sites

Voilà, c'est envoyé! Je vous remercie tous, et plus particulièrement MissZaZa, c'est très sympa de nous aider comme tu l'as fait.

J'ai essayé le programme tout à l'heure, il trouve tous les mots sauf ceux qui ont des accents apperement, mais c'est pas grave, c'est déja pas mal.

Maintenant je vais me débrouiller pour comprendre comment marche le code, et pourquoi pas l'améliorer.

Encore merci. :chinois:

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...