C++ STL fichier en argument char * en string

Résolu/Fermé
velderama Messages postés 199 Date d'inscription mardi 26 février 2008 Statut Membre Dernière intervention 11 mai 2011 - 8 mars 2008 à 15:29
velderama Messages postés 199 Date d'inscription mardi 26 février 2008 Statut Membre Dernière intervention 11 mai 2011 - 10 mars 2008 à 09:58
Bonjour,
Comment transformé un fichier lue en parametre en un string?
J'aurai besoin d'utilisé : istream_iterator<string>(file) iterateur predefini de la stl mais qui ne connait pas de type char *

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

// Ouverture du bon fichier
ifstream file;
file.open(argv[1],ios::in);


.....

for_each( istream_iterator<string>(file), istream_iterator<string>(),....)

Merci
A voir également:

4 réponses

mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
8 mars 2008 à 16:27
Le plus simple c'est d'utiliser un getline qui permet de lire le fichier ligne par ligne
#include <fstream>
#include <iostream>
#include <string>

int main(int argc,char **argv){
    // Contrôler le nombre d'arguments
    if(argc != 2){
        std::cerr << "usage: " << argv[0] << " filename" << std::endl;
        return 1;
    }

    // Ouvrir le fichier
    std::ifstream ifs(argv[1]);
    if(!ifs){
        std::cerr << "impossible d'ouvrir le fichier " << argv[1] << std::endl;
        return 2;
    }

    // Lire le fichier
    {
        std::string line;
        for(;std::getline(ifs,line);){
            std::cout << line << std::endl;
        }
    }

    // Fermer le fichier
    ifs.close();
    return 0;
}

Bonne chance
4
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 125
8 mars 2008 à 17:27
Bonjour,

Si on veut vraiment utiliser for_each on peut faire comme suit:

#include <sstream>
#include <string>
#include <iostream>
#include <fstream>
#include <algorithm>

void afficher( char &c )
{
	// c est passé par référence, on pourrait le modifier.
	std::cout << c;
}

int main( int argc, char *argv[])
{
	/*
	Vérification de l'argument...
	*/

	std::ifstream	f;

	f.open( argv[1] );

	if ( f.is_open() )
	{
		std::stringstream	sstream;
		std::string	s;

		// lecture du fichier
		sstream << f.rdbuf();

		// fermeture du fichier
		f.close();
		
		// Récupérer la lecture dans une string
		s = sstream.str();

		// traîtement par boucle
		std::for_each( s.begin(), s.end(), aff );

		getchar();
		return 0;
	}
	else
		return 1;
}



Mais je dois avouer que j'ai codé le truc juste par curiosité, je préfère la solution de MamieMando.
Quoi ? On a plus le droit de lancer des fleurs maintenant ? ;-)

M.
1
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
9 mars 2008 à 14:37
Si si tu as le droit ^^
0
velderama Messages postés 199 Date d'inscription mardi 26 février 2008 Statut Membre Dernière intervention 11 mai 2011 10
10 mars 2008 à 09:58
Merci a tous les 2!
0