begin process at 2012 05 28 18:44:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

comparer les mots d'un fichier texte aux éléments d'une liste chaînée (c++)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

comparer les mots d'un fichier texte aux éléments d'une liste chaînée (c++)

mardi 22 juin 2010 à 17:07:31 | comparer les mots d'un fichier texte aux éléments d'une liste chaînée (c++)

mervat


ce programme permet de créer une liste de mots à partir d'un fichier texte"in1" et puis éliminer les mots qui existent dans la liste du fichier texte "in" et mettre le résultat dans un autre fichier texte appelé "out".

Code C/C++ :
#pragma argsused
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <stdlib.h> /*ou alloc.h*/
#include <string>
#include <iostream.h>
#include <fstream>
using std::ifstream;
using std::ofstream;
using std::string;
struct page {string val; struct page *suivant; };
struct page *premier;

void creerliste(void)// créer une liste de mots à partir d'un fichier texte
{ ifstream entree ("in1.txt");
string i;
struct page *precedent,*nouveau;
premier=(struct page *)malloc(sizeof(struct page));
entree >> premier->val;
precedent=premier;
while (entree >> i)
{
nouveau=(struct page *)malloc(sizeof(struct page));
precedent->suivant=nouveau;
precedent=nouveau;
nouveau->val =i;
}
precedent->suivant=NULL;
}

 void compare(struct page *debut)// éliminer les mots qui existent dans la liste du fichier texte et mettre le résultat dans un autre fichier texte
{  int i=0;
ifstream ifs  ("in.txt") ;
ofstream ofs ("out.txt");
string s;
while (ifs >> s)
{  while(debut!=NULL)
   {if (s == debut->val)
		i=1; break;
		debut=debut->suivant;
   }
	if (i==1)    ofs << ""; //ne pas réécrire le mot dans le nouveau fichier
	else  ofs << s << " "; //réécrire le mot dans le nouveau fichier

	i=0;
}
}

int main(int argc, char* argv[])
{
creerliste();
compare(premier);
system("PAUSE");
return 0; 
}

le programme est exécutable
la procédure creerliste est juste mais la procédure compare me donne un faux résultat .
pourrais-je avoir votre aide svp.
mardi 22 juin 2010 à 17:14:48 | Re : comparer les mots d'un fichier texte aux éléments d'une liste chaînée (c++)

fregolo52

Membre Club
commence par mettre des accolades dans tes blocs if et while !!!
et 1 ligne par instruction, et tu verras que ton programme "break" en permanence et donc debut=debut->suivant; n'est jamais exécuté.
mardi 22 juin 2010 à 17:44:35 | Re : comparer les mots d'un fichier texte aux éléments d'une liste chaînée (c++)

mervat



oui c vrai ce que vous avez dit, alors si mon code devient:
Code C/C++ :
void compare(struct page *debut)
{  int i=0;
ifstream ifs  ("in.txt") ;
ofstream ofs ("out.txt");
string s;
while (ifs >> s)
   {  while(debut!=NULL)
		{if (s == debut->val)
		   {i=1;
		    break;}

		 debut=debut->suivant;
		}
	if (i==1)    ofs << "";
	else  ofs << s << " ";

	i=0;
   }

}

ça me donne aussi un faux résultat (il me réécrit tous les mots du fichier "in" dans le nouveau fichier "out" sans éliminer les mots de la liste)
mardi 22 juin 2010 à 17:51:14 | Re : comparer les mots d'un fichier texte aux éléments d'une liste chaînée (c++)

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Plusieurs remarques:
- Évite les conio.h si tu n'en as pas besoin tu perds en portabilité pour rien.
- Pas besoin d'include spécifique au C (tous les trucs en .h), en C++.
- <string> est déjà dans <iostream>.
- <iostream.h> est à proscrire ! Utilise toujours <iostream>
- En C++ une classe et une structure, c'est la même chose ! Donc pas besoin de réecrire "struct" partout. De plus, tu peux faire un new, plutôt qu'un malloc.
- Évite les variables globales.
- Évite NULL, préfère 0, voir: [ Lien ]

Ton problème était que tu ne repartais pas du début de la liste d'exclusion quand tu cherchais ce qu'il fallait éliminer. J'ai donc ajouter un "head = debut" pour sauvegarder la tête de la liste, puis je remet cette liste au début à chaque tour de vérification (debut = head).

A noter que je n'ai pas corrigé les erreurs de fuites de mémoires (rien n'est libéré !). Pense à faire une procédure de libération (avec le mot clé delete).
Code C/C++ :
#include <iostream>
#include <fstream>

using std::ifstream;
using std::ofstream;
using std::string;

struct Page
{
  string val;
  Page* suivant;
};

// créer une liste de mots à partir d'un fichier texte
Page* creerliste()
{
  ifstream entree ("in1.txt");
  string i;
  Page* premier;
  Page* precedent;
  Page* nouveau;

  premier = new Page;
  entree >> premier->val;
  precedent = premier;
  while (entree >> i)
  {
    nouveau = new Page;
    precedent->suivant = nouveau;
    precedent = nouveau;
    nouveau->val = i;
  }
  precedent->suivant = 0;

  return premier;
}

void compare(Page* debut)
{
  int i = 0;
  ifstream ifs("in.txt") ;
  ofstream ofs("out.txt");
  string s;
  Page* head = debut;

  while (ifs >> s)
  {
    debut = head;
    while (debut != 0)
    {
      if (s == debut->val)
      {
	i = 1;
	break;
      }
      debut = debut->suivant;
    }
    if (i == 1)
      ofs << ""; //ne pas réécrire le mot dans le nouveau fichier
    else
      ofs << s << " "; //réécrire le mot dans le nouveau fichier
    i = 0;
  }
}

int main()
{
  Page* premier = creerliste();
  compare(premier);

  return 0;
}


_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
mardi 22 juin 2010 à 18:08:59 | Re : comparer les mots d'un fichier texte aux éléments d'une liste chaînée (c++)

mervat


je vous remercie infiniment, enfin le résultat est juste.
mardi 22 juin 2010 à 18:40:28 | Re : comparer les mots d'un fichier texte aux éléments d'une liste chaînée (c++)

CptPingu

Administrateur CodeS-SourceS
En passant, ceci:
Code C/C++ :
    if (i == 1)
      ofs << ""; //ne pas réécrire le mot dans le nouveau fichier
    else
      ofs << s << " "; //réécrire le mot dans le nouveau fichier

peut être amélioré en:
Code C/C++ :
    if (i != 1)
      ofs << s << " "; //réécrire le mot dans le nouveau fichier


_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
mercredi 23 juin 2010 à 10:17:32 | Re : comparer les mots d'un fichier texte aux éléments d'une liste chaînée (c++)

mervat


oui effectivement, c vrai ce que vous avez dit, merci encore.
mercredi 23 juin 2010 à 10:24:52 | Re : comparer les mots d'un fichier texte aux éléments d'une liste chaînée (c++)

mervat

j'ai oublié de vous dire que j'ai ajouté #include <string> car sinon ça me donne une erreur de compilation.


Cette discussion est classée dans : fichier, page, texte, include, struct


Répondre à ce message

Sujets en rapport avec ce message

problème fichier texte (ofstream) taille ? [ par baby3378 ] Bonjour à tous, voila, j'ai repri il y a quelque temps la base d'une source qui listait tous les fichiers d'un repertoire. Jusque là aucun souci. Cep Uploader fichier texte avec un page PHP [ par d4M13N ] Bonjour,Je suis actuellement en train de coder un petit programme qui doit envoyer un fichier texte sur mon serveur FTP.Pour ne pas mettre les identif éliminer les mots vides d'un fichier texte [ par mervat ] bonjour, j'ai un petit truc qui me bloque, je veux éliminer du fichier texte in les mots qui existent dans le fichier texte motvide et mettre le résul lecture fichier texte et mettre le resulat dans un tableau. [ par walidaydi ] bonjour, j'ai un fichier texte qui contient des nombres réels séparés par un espace. comme ca: 124.31611622563169 161.22159929707496 186.9616408968881 Ecriture Fichier Texte (avec ofstream) [ par baptchr55 ] Bonjour à tous... Je souhaiterais stocker dans un fichier texte l'ensemble des données que je reçois (par le biais d'un socket cpp). à savoir j'ai es Fichier ressource .rc et fonts [ par bunob ] Bonjour, J'essaie d'appliquer une police particulière sur un contrôle : [code=cpp] #include #include "resource.h" #include "winres.h" .... FONT 18, enregistrement handle fichier texte [ par flamouth ] Bonsoir, depuis maintenant 2 jours je cherche comment faire pour enregistrer le handle d'une fenêtre ayant le focus dans un fichier texte. J'ai reussi lire d'un fichier texte en c++ [ par sny2009 ] Bonjour, Je rencontre un problème avec la fonction fread Je veux lire un nombre de caractère N de fichier texte voila le code : [b]nb_car_lu=fread calculs tableau [ par 3463 ] Salut à tous !! J'ai besoin de votre aide [^^happy13] Voici mon programme : # include # include # include # include # include # include # incl changer l'encodage d'un fichier texte [ par snake57 ] Bonjour à tous, J'ai un fichier texte que je suis obligé d'ouvrir dans le format d'encodage latin 1. J'aimerais faire en C l'une des deux choses sui


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,137 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales