OVH Cloud OVH Cloud

Trouver un chaine

5 réponses
Avatar
MB
Bonjour

Algo

- Je parcours le fichier txt1
- Je capture la ligne du txt1
- Je recherche dans le txt2 la ligne capturée du txt1
- Je trouve
- FIN
- Je ne trouve pas
- Ligne suivante
- FIN


Est-ce que je peux avoir des exemples de code C++

Cordialement

5 réponses

Avatar
Marc Boyer
Le 12-12-2005, MB a écrit :
- Je parcours le fichier txt1
- Je capture la ligne du txt1
- Je recherche dans le txt2 la ligne capturée du txt1
- Je trouve
- FIN
- Je ne trouve pas
- Ligne suivante
- FIN


Est-ce que je peux avoir des exemples de code C++


Que ce soit sur fclc ou fclc++, l'habitude est plutot
d'aider les gens plutot que de faire à leur place.
Essaye quelque chose, en C ou en C++ (puisque tu as
posté sur les deux) et tu obtiendras plus d'aide.

D'autant plus que, ce que tu décris là,
ça s'appelle grep.

Marc Boyer
--
Entre le fort et le faible, c'est la liberte qui opprime et le droit
qui libere. Henri Lacordaire, Dominicain

Avatar
MB
J'ai déposé le code sur les news du C
Mon programme tournera sur du NT4 dons pas de grep
Mon idée de départ c'était de voir les nouvelle pistes et ne pas vous
influencer avec mon code
Merci


- Je parcours le fichier txt1
- Je capture la ligne du txt1
- Je recherche dans le txt2 la ligne capturée du txt1
- Je trouve
- FIN
- Je ne trouve pas
- Ligne suivante
- FIN


Est-ce que je peux avoir des exemples de code C++


Que ce soit sur fclc ou fclc++, l'habitude est plutot
d'aider les gens plutot que de faire à leur place.
Essaye quelque chose, en C ou en C++ (puisque tu as
posté sur les deux) et tu obtiendras plus d'aide.

D'autant plus que, ce que tu décris là,
ça s'appelle grep.

Marc Boyer



Avatar
loic.actarus.joly
Premier jet sans relecture, plus pour l'idée qu'autre chose :

ifstream i2 (file2);
string s;
set <string> existants;
while (getline(i2, s))
existants.insert(s);

ifstream i1 (file1);
while (getline(i1, s))
if (existants.find(s) != existants.end())
return true;
return false;
Avatar
Alexandre
bonjour,

- Je parcours le fichier txt1


utilisation d'un flux type std::ifstream

- Je capture la ligne du txt1


utilisation de la fonction std::getline

- Je recherche dans le txt2 la ligne capturée du txt1


utilisation de std::find

- Je trouve
- FIN
- Je ne trouve pas
- Ligne suivante
- FIN


boucle de base ;-)

Sans faire le TD à ta place, je peux pas t'aider plus ;-)
Voir la documentation de la STL (livrée avec ton compilateur normalement,
sinon google est ton ami) pour les objets et fonctions sus-citées.


Est-ce que je peux avoir des exemples de code C++

Cordialement


Avatar
kanze
wrote:
Premier jet sans relecture, plus pour l'idée qu'autre chose :

ifstream i2 (file2);
string s;
set <string> existants;
while (getline(i2, s))
existants.insert(s);

ifstream i1 (file1);
while (getline(i1, s))
if (existants.find(s) != existants.end())
return true;
return false;


Sans savoir plus (comme, par exemple, les tailles potentielles
des fichiers), c'est difficile à dire. Implémenté de façon
simple, c'est O(n*m), avec comme coût constante de chaque
opération une lecture disque. C-à-d qu'avec de grands fichiers,
ça risque de ne pas terminer dans un temps acceptable.

Si on pouvait tenir un des deux fichiers (voire tous les deux)
en mémoire, ça serait déjá un gain important. Sinon, je
considèrerais bien des solutions moins évidentes, mais plus
rapide.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34